花小錢,周邊遊,馬上搶,請關注公眾號:愛訂不訂
作者:唐璜
這一章基於你已經瞭解了微服務以及Nacos,並下載安裝並啟動了Nacos,若還未啟動Nacos,可以先看我們上一篇文章:初探Nacos(一)-- 單機模式啟動。 由於目前1.0版本不太穩定,我測試時遇到心跳檢測失敗的問題,暫時切換到0.9.0版本啟動演示。
在瞭解Nacos的服務註冊與發現前,我們先看看Nacos官方的架構圖:
那麼,我們現在開始參考 官方例子(nacos-spring-cloud-discovery-example),嘗試將服務註冊到Nacos。
首先,我們新建一個專案,在pom.xml新增依賴。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
複製程式碼
注意:版本 0.2.x.RELEASE 對應的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 對應的是 Spring Boot 1.x 版本。我現在用的Spring Boot 2.x對纓的最新版本。
第二步,我們在該專案下建一個服務提供者Module,在pom.xml新增依賴。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
複製程式碼
並在application.properties配置,以便將服務註冊到Nacos服務中心。
server.port=18080
spring.application.name=nacos-demo-rest-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
複製程式碼
第三步,在SpringBoot啟動類,通過註解@EnableDiscoveryClient開啟服務註冊發現功能。如官方例子:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
@RestController
class EchoController {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
}
}
複製程式碼
這裡提供的是一個REST介面,後面我們再研究Dubbo的服務呼叫。注意:使用Ribbon負載均衡的時候,服務名中不能使用下劃線,不然會找不到服務。
然後,我們啟動該服務,觀察Nacos控制檯,看到服務已註冊。
通過瀏覽器可以訪問該REST介面:
停止專案後,我們再觀察Nacos控制檯,看到的介面如下:
第四步,我們在該專案下再建一個服務消費者Module,在pom.xml新增依賴。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
複製程式碼
並在application.properties配置,以便將服務註冊到Nacos服務中心。
server.port=18081
spring.application.name=nacos-demo-rest-consumer
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
複製程式碼
第五步,在SpringBoot啟動類,通過註解@EnableDiscoveryClient開啟服務註冊發現功能。如官方例子:
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
@RestController
public class TestController {
private final RestTemplate restTemplate;
@Autowired
public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str) {
return restTemplate.getForObject("http://nacos-demo-rest-provider/echo/" + str, String.class);
}
}
}
複製程式碼
程式碼裡到nacos-demo-rest-provider就是前面的服務提供者名稱。
這裡要說一下的是@LoadBalanced,在RestTemplate上新增@LoadBalanced註解,使RestTemplate支援負載均衡,如果不加@LoadBalanced註解的話,會報java.net.UnknownHostException異常,此時無法通過註冊到Nacos Server上的服務名來呼叫服務,因為RestTemplate是無法從服務名對映到ip:port的,對映的功能是由LoadBalancerClient來實現的。
好了,我們現在啟動該服務,觀察Nacos控制檯,新的服務也已註冊到Nacos。
通過瀏覽器可以訪問,可以看到已呼叫了:
下面再借官方的一個圖讓大家更清晰的瞭解整個服務的註冊與發現以及介面的呼叫過程。
好了,Spring cloud基於Nacos的服務註冊與發現到此結束,是不是很簡單,可能有很多小夥伴在用Dubbo,那麼,下一章我們將開始嘗試Dubbo的服務呼叫。