在 pom.xml
文件中添加以下依赖:
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- spring cloud openfeign 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在application.yml
文件中添加以下配置:
spring:
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 127.0.0.1:8848
feign:
sentinel:
enabled: true
创建一个 RemoteUserService
接口,用于调用远程用户服务:
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
/**
* 用户服务
*
* @author ruoyi
*/
@FeignClient(contextId = "remoteUserService", value = "ruoyi-system", fallbackFactory = RemoteUserFallbackFactory.class)
public interface RemoteUserService
{
/**
* 通过用户名查询用户信息
*
* @param username 用户名
* @return 结果
*/
@GetMapping(value = "/user/info/{username}")
public Object getUserInfo(@PathVariable("username") String username);
}
在这个接口中:
- 使用
@FeignClient
注解声明远程调用的服务- 指定
contextId
和value
属性- 设置
fallbackFactory
属性,指定降级处理类RemoteUserFallbackFactory
创建 RemoteUserFallbackFactory
类,实现 FallbackFactory
接口:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import feign.hystrix.FallbackFactory;
/**
* 用户服务降级处理
*
* @author ruoyi
*/
@Component
public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserService>
{
private static final Logger log = LoggerFactory.getLogger(RemoteUserFallbackFactory.class);
@Override
public RemoteUserService create(Throwable throwable)
{
log.error("用户服务调用失败:{}", throwable.getMessage());
return new RemoteUserService()
{
@Override
public Object getUserInfo(String username)
{
return "{\"code\":\"500\",\"msg\": \"用户服务熔断降级处理\"}";
}
};
}
}
在这个类中:
- 实现
create()
方法,在其中编写降级逻辑- 打印异常信息
- 返回自定义的降级响应
在启动类上添加
@EnableFeignClients
注解,扫描Feign
客户端接口:
@EnableFeignClients(basePackages = "com.ruoyi")
public class RuoYiGatewayApplication
{
public static void main(String[] args)
{
SpringApplication.run(RuoYiGatewayApplication.class, args);
}
}
同时,需要在 resources/META-INF/spring.factories
文件中配置自动装配类 RemoteUserFallbackFactory
:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
.....
com.ruoyi.system.api.factory.RemoteUserFallbackFactory
通过以上步骤,可实现在若依微服务项目中集成 OpenFeign
的实现。当远程服务调用失败时,会自动执行 RemoteUserFallbackFactory
中定义的降级逻辑,返回友好的响应信息。
powered by kaifamiao