开发喵星球

若依微服务集成OpenFeign(234)

1. 添加依赖

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>

2. 开启 Feign 对 Sentinel 的支持

application.yml 文件中添加以下配置:

spring:
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848

feign:
  sentinel:
    enabled: true

3. 编写 Feign 客户端接口

创建一个 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 注解声明远程调用的服务
  • 指定 contextIdvalue 属性
  • 设置 fallbackFactory 属性,指定降级处理类 RemoteUserFallbackFactory

4. 实现降级处理类

创建 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() 方法,在其中编写降级逻辑
  • 打印异常信息
  • 返回自定义的降级响应

5. 在启动类上添加 Feign 客户端扫描

在启动类上添加 @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 中定义的降级逻辑,返回友好的响应信息。

   
分类:Java/OOP 作者:无限繁荣, 吴蓉 发表于:2024-06-07 09:11:25 阅读量:201
<<   >>


powered by kaifamiao