在微服务架构下,服务之间的调用必不可少,SpringCloud框架作为一个微服务解决方案,为我们提供了一个简单易用的组件,这个组件就是OpenFegin,OpenFegin是一个声明式的客户端,支持我们像调用本地方法一样去调用远程服务。

服务提供者

服务提供者端的代码正常书写即可,无需引入openfegin的相关东西。原因是这样:大家在Java代码中发起http请求都应该写过,我们可以使用OkHttp、HttpClient等,这些类只需要在消费者侧引入使用即可,并不需要在服务端去引入和使用。因此,OpenFegin大家就可以想象成一个发起Http请求的工具类,自然就可以理解为什么只需要在消费者端引入了。

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.alibaba.cloud</groupId>
  8. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  9. </dependency>
  10. </dependencies>
  1. spring:
  2. application:
  3. name: provider-nacos
  4. cloud:
  5. nacos:
  6. server-addr: localhost:8848
  1. server:
  2. port: 10001
  1. @RestController
  2. public class ProviderController {
  3. @RequestMapping("test")
  4. public String test(){
  5. return "provider";
  6. }
  7. }

消费者端

消费者侧就需要引入openfegin,具体代码如下

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.cloud</groupId>
  7. <artifactId>spring-cloud-starter-openfeign</artifactId>
  8. </dependency>
  9. <dependency>
  10. <groupId>com.alibaba.cloud</groupId>
  11. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  12. </dependency>
  1. server:
  2. port: 10002
  1. spring:
  2. application:
  3. name: consumer-nacos-demo
  4. cloud:
  5. nacos:
  6. server-addr: localhost:8848
  1. @EnableFeignClients
  2. @SpringBootApplication
  3. public class ConsumerNacosDemoApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(ConsumerNacosDemoApplication.class, args);
  6. }
  7. }
  1. @FeignClient(name = "provider-nacos")
  2. public interface ProviderClient {
  3. @RequestMapping("test")
  4. String test();
  5. }
  1. @RestController
  2. public class ConsumerNacosDemoController {
  3. @Autowired
  4. private ProviderClient providerClient;
  5. @RequestMapping("testFegin")
  6. public String testFegin() {
  7. return providerClient.test();
  8. }
  9. }

image.png