抽取openFeign接口成为API模块

5 篇文章 0 订阅
3 篇文章 0 订阅
本文介绍了如何在Spring Cloud项目中使用OpenFeign进行服务调用,并展示了如何将服务调用接口和熔断处理模块化,降低消费者与生产者的耦合度。通过创建生产者API模块,消费者可以方便地引入并使用,同时提供了一种服务调用的熔断处理方式。源码下载链接已给出。
摘要由CSDN通过智能技术生成
openfeign
  • 项目架构
    ﹂openfeign
     ﹂consumer---------------------------普通消费者(feign自己实现)
     ﹂producer---------------------------生产者
     ﹂producer-api-----------------------生产者的api接口(feign实现)
     ﹂api-consumer-----------------------使用生产者的api模块的消费者
  • 生产者
@RestController
public class HelloController {

    @RequestMapping("sayHello")
    public String sayHello(){
        return "hello";
    }
}
  • 消费者

a) 依赖

  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>

b) 启动类追加@EnableFeignClients 在bootstrap.yml加上feign.hystrix.enabled=true

c) 服务调用接口和熔断

@FeignClient(name = "prod",fallback = SayHelloServiceImpl.class)
public interface SayHelloService {
    @RequestMapping("sayHello")
    public String sayHello();
}


@Component
public class SayHelloServiceImpl implements SayHelloService {
    @Override
    public String sayHello() {
        return "服务丢失";
    }
}

d) 服务调用

@RestController
public class SayHelloController {

    @Autowired
    private SayHelloService sayHelloService;

    @RequestMapping("feignSayHello")
    public String sayHello(){
        return sayHelloService.sayHello();
    }

}

e) 思考

如果生成者被多个消费者使用,那么每个消费者都需要编写服务调用接口和熔断,耦合度高,不是很好,下文介绍抽离服务调用接口和熔断成为API模块

  • 生产者api

a) 依赖

  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>

b) 服务调用接口和熔断

@FeignClient(name = "prod",fallbackFactory=SayHelloServiceFeignFallbackFactory.class)
@Component
public interface SayHelloService {
    @RequestMapping("sayHello")
    public String sayHello();
}


@Component
public class SayHelloServiceFeignFallbackFactory implements FallbackFactory<SayHelloService> {

    @Override
    public SayHelloService create(Throwable throwable) {
        SayHelloServiceImpl sayHelloService = new SayHelloServiceImpl();
        sayHelloService.setCause(throwable);
        return sayHelloService;
    }
}

@Slf4j
public class SayHelloServiceImpl implements SayHelloService {
    @Setter
    private Throwable cause;

    @Override
    public String sayHello() {
        log.error("错误信息为:{}",cause);
        return "服务丢失";
    }
}

c) 创建spring.factories文件与resources\META-INF下

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.it.base.openfeign.prod.api.service.impl.SayHelloServiceImpl,\
  com.it.base.openfeign.prod.api.service.SayHelloServiceFeignFallbackFactory

文件作用为:将我们的SayHelloServiceImpl和SayHelloServiceFeignFallbackFactory注入到被引入该工程里

  • 使用生产者的api模块的消费者
    a) 依赖
  <dependency>
     <groupId>org.example</groupId>
     <artifactId>producer-api</artifactId>
     <version>1.0-SNAPSHOT</version>
  </dependency>

b) 启动类追加@EnableFeignClients(basePackages = {“com.it.base”}),在bootstrap.yml加上feign.hystrix.enabled=true

扫描feign接口的位置,不加接口只会走熔断。

c) 服务调用

 @RestController
public class SayHelloController {
    @Autowired
    private SayHelloService sayHelloService;
    
    @RequestMapping("apiFeignSayHello")
    public String apiFeignSayHello(){
        return sayHelloService.sayHello();
    }
}

源码下载地址:https://download.csdn.net/download/qq_33422712/16656781

在使用Dubbo进行微服务架构的开发中,可以通过抽取公共接口的方式来实现服务之间的解耦和重用。Dubbo提供了API项目或者xml配置的方式来抽取公共接口。 通过API项目抽取公共接口的方式,可以将公共接口定义在一个独立的API项目中,其他服务可以通过引入该API项目来使用公共接口。这样,当公共接口需要修改时,只需要修改API项目,然后重新编译和发布该项目即可,其他服务无需修改代码,只需要重新引入更新后的API项目即可使用最新的接口定义。 另外,Dubbo还提供了使用xml配置的方式来抽取公共接口。通过在dubbo-config配置模块中配置公共接口,其他服务可以通过引入该配置模块来使用公共接口。这样,当公共接口需要修改时,只需要修改配置文件,然后重新部署和启动服务即可,无需修改服务代码。 通过抽取公共接口,可以减少服务间的依赖关系,降低耦合度,提高代码的复用性和可维护性。同时,也可以方便地对公共接口进行修改、部署和更新,减少了操作的重复性,降低了维护成本。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot整合Dubbo和Zookeeper升级版](https://download.csdn.net/download/j080624/10775442)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [秒懂Dubbo接口(原理篇)](https://blog.csdn.net/zuozewei/article/details/85333060)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Dubbo接口测试](https://blog.csdn.net/weixin_42724501/article/details/124497138)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值