需要建兩個工程,一個是服務提供者,一個是服務呼叫者
服務提供者
一個普通的 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,這樣程式碼就會清爽很多