需要建两个工程,一个是服务提供者,一个是服务调用者
服务提供者
一个普通的 nacos 服务,增加一个 controller 方法即可,上一篇文章刚说了,这里简单说下
<!-- 服务提供者不调用其他服务,所以只需要注册到 nacos 的依赖 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置文件
server:port: 8081spring:application:name: my-provider-testcloud: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: 8082spring:application:name: my-consumer-testcloud: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 {@Resourceprivate 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,这样代码就会清爽很多