OpenFeign 服务调用与负载

需要建两个工程,一个是服务提供者,一个是服务调用者

服务提供者

一个普通的 nacos 服务,增加一个 controller 方法即可,上一篇文章刚说了,这里简单说下

<!-- 服务提供者不调用其他服务,所以只需要注册到 nacos 的依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

配置文件

server:
  port: 8081

spring:
  application:
    name: my-provider-test
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # Nacos服务注册中心地址

代码

// 启动类
@EnableDiscoveryClient
@SpringBootApplication
public class SpringbootApplication {
   public static void main(String[] args) {
           SpringApplication.run(SpringbootApplication.class,args);
       }

}

// controller
@RestController
public class TestController {

    @GetMapping("/test")
    public String testGetConfig(){
        return "test";
    }
}

服务消费者

pom 依赖

<!-- 服务调用,底层需要 loadbalancer 做负载 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

<!-- 服务注册 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

配置文件

server:
  port: 8082

spring:
  application:
    name: my-consumer-test
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # Nacos服务注册中心地址

代码

// 一个 Feign 接口,value 是服务名称
@FeignClient(value = "my-provider-test")
public interface TestFeign {

    // 这个方法要和服务提供者那里保持一致
    @GetMapping("/test")
    String test();

}

// controller
@RestController
public class Controller {

    @Resource
    private TestFeign testFeign;

    @GetMapping("/test")
    public String testFeign(){
        return testFeign.test();
    }

}

// 启动类
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients // 开启 Feign
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

启动服务,nacos 能看到这俩服务

调用接口测试

生产中一般不会不是这样,通常服务提供者也是消费者,一般 controlle 继承 Feign 接口,@RequestMapping、@RequestBody 等这些注解也能继承,所以 Feign 中既定义了 Feign 也定义了接口,如果接入 swagger,swagger 以 controller 来构建 dock,这样代码就会清爽很多

posted @ 2024-07-14 16:05  CyrusHuang  阅读(1)  评论(0编辑  收藏  举报