若依微服务中使用Feign是一种方便的方式来实现微服务之间的通信。Feign是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加简单。以下是使用Feign进行微服务调用的一般步骤:
创建一个接口,使用
@FeignClient
注解指定要调用的服务名、降级处理工厂等信息。
在接口中定义需要调用的方法,包括请求方法、路径、请求参数等。
package com.ruoyi.system.api;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.SysDept;
import com.ruoyi.system.api.factory.RemoteDeptFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import java.util.Map;
/**
* 部门服务
* @author ruoyi
*/
@FeignClient(contextId = "remoteDeptService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteDeptFallbackFactory.class)
public interface RemoteDeptService {
/**
* 获取部门列表
*
* @param source 请求来源
* @return 结果
* @RequestParam GET请求要指定类型 默认为POST请求
*/
@GetMapping("/dept/remote/map")
R<Map<Long, SysDept>> map(@RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}
创建一个降级处理工厂,实现
FallbackFactory
接口,用于处理调用失败时的情况。
package com.ruoyi.system.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.RemoteDeptService;
import com.ruoyi.system.api.domain.SysDept;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* 部门服务降级处理
*
* @author ruoyi
*/
@Component
public class RemoteDeptFallbackFactory implements FallbackFactory<RemoteDeptService> {
private static final Logger log = LoggerFactory.getLogger(RemoteDeptFallbackFactory.class);
@Override
public RemoteDeptService create(Throwable throwable) {
log.error("部门服务调用失败:{}", throwable.getMessage());
return new RemoteDeptService() {
@Override
public R<Map<Long, SysDept>> map(String source) {
return R.fail("部门服务调用失败:" + throwable.getMessage());
}
};
}
}
根据项目需要,在配置文件中指定需要注入的降级处理工厂类。
位置:ruoyi-api/ruoyi-api-system/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
com.ruoyi.system.api.factory.RemoteUserFallbackFactory
com.ruoyi.system.api.factory.RemoteLogFallbackFactory
com.ruoyi.system.api.factory.RemoteFileFallbackFactory
com.rjgf.system.api.factory.RemoteDeptFallbackFactory
如果是调用的是自定义模块,在
SpringApplication
上需要标识注解
@EnableRyFeignClients
在需要使用的地方注入使用
@Autowired
private RemoteDeptService remoteDeptService;
R<Map<Long, SysDept>> remoteDeptRusult = remoteDeptService.map(INNER);
if (R.FAIL == remoteDeptRusult.getCode()) {
throw new BaseException("请联系系统管理员");
}
位置:ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java
@RestController
@RequestMapping("/dept")
public class SysDeptController extends BaseController
{
@Autowired
private ISysDeptService deptService;
/**
* 获取部门map
*/
@InnerAuth
@GetMapping("/remote/map")
public R<Map<Long, SysDept>> map() {
Map<Long, SysDept> collect = deptService.selectDeptList(new SysDept())
.stream().collect(Collectors.toMap(SysDept::getDeptId, o -> o));
return R.ok(collect);
}
}
重启项目,若依微服务调用Feign
完成✅
powered by kaifamiao