SpringCloud AliBaBa Nacos中Feign的使用

①:添加依赖(服务调用方)

   <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version> <!-- 指定Nacos依赖的版本 -->
    </dependency>

<!--        &lt;!&ndash; OpenFeign 依赖 &ndash;&gt;-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.1.RELEASE</version> <!-- 指定OpenFeign依赖的版本 -->
    </dependency>
服务提供方依赖
      <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version> <!-- 指定Nacos依赖的版本 -->
      </dependency>

②:是否需要覆盖默认配置(比如使Feign的熔断机制生效)

配置文件中的修改
服务调用方
spring.application.name=consumer 这个如果有拼接的话,不能出现"_" spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 指定nacos的地址,服务提供方和消费方去注册

服务提供方
spring.application.name=provider spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
配置文件上就加这么多

这个是用了feign的熔断功能

feign:
  hystrix:
    enabled: true # 开启Feign的熔断功能

③:在启动类上添加注解
consumer要调用就要在启动类上加注解开启feign

@EnableFeignClients   //开启Feign功能

在服务提供方就不需要加什么注解了。

④:编写Fiegn的客户端(以下都是以Feign的熔断机制为例)

//声明这是一个Feign客户端,类似`@Mapper`注解。同时通过`value`属性指定服务名称
//fallback 属性为熔断策略的实现类。熔断策略实现类应实现 Feign 客户端接口,并提供处理熔断逻辑的方法。
@FeignClient(value = "service-provider",fallback = UserFeignClientFallback.class)
public interface UserFeignClient {
    //把提供方Controller中对应的方法声明放在这里
    @GetMapping("/provider/findById/{id}")
     User findById(@PathVariable Integer id);
}

⑤:编写熔断策略(其实就是Fiegn的客户端的一个实现类,实现具体的降级逻辑)

@Component
public class UserFeignClientFallback implements UserFeignClient{
    //这里编写的是接口方法中的具体的降级逻辑
    @Override
    public User findById(Integer id) {
        User user = new User();
        user.setUsername("系统繁忙,请稍后再试");
        return user;
    }
}

⑥:Controller层注入并进行调用

@RestController
@RequestMapping("/consumer")
public class UserController {
    @Autowired
    UserFeignClient userFeignClient;
    //这个地方也要指定路径  访问的时候直接用服务调用方的接口访问。
    public String findById(@PathVariable Integer id){
        User user = userFeignClient.findById(id);
        System.out.println(user);
        return user.toString();
    }
}

posted @ 2023-06-19 20:10  有点儿意思  阅读(67)  评论(0编辑  收藏  举报