1 Nacos
關于Nacos之前寫了兩篇文章關于SpringBoot對它的使用叉存,感興趣可以查看一下。
《SpringBoot使用Nacos服務發(fā)現(xiàn)》
在SpringBoot使用的時候伪阶,需要自行去向Nacos服務注冊自己的服務,Nacos也提供了SpringCloud服務發(fā)現(xiàn)的依賴处嫌,本文結合spring-cloud-starter-alibaba-nacos-discovery進行使用介紹栅贴。
本文使用版本為:
- SpringCloud Finchley.SR2
- SpringBoot 2.0.3.RELEASE
- spring-cloud-starter-alibaba-nacos-discovery 0.2.1.RELEASE
- spring-cloud-starter-openfeign 2.0.0.RELEASE
2.本文場景
兩個服務,如下:
- springcloud-nacos-discovery-provider:端口號10000熏迹,服務提供者檐薯。
- springcloud-nacos-discovery-consumer:端口號10001,服務消費者注暗。
原理很簡單坛缕,瀏覽器訪問消費者墓猎,消費者調用服務提供者。
3.服務提供者
3.1 依賴配置
創(chuàng)建一個項目祷膳,項目中加入SpringCloud-Nacos依賴陶衅,完整pom如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dalaoyang</groupId>
<artifactId>springcloud_nacos_discovery_provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springcloud_nacos_discory_provider</name>
<description>springcloud_nacos_discovery_provider</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.2 啟動類
在啟動類加入@SpringBootApplication注解直晨,完整啟動類代碼如下所示搀军。
package com.dalaoyang;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class SpringcloudNacosDiscoveryProviderApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudNacosDiscoveryProviderApplication.class, args);
}
}
3.3 配置文件
配置文件中配置Nacos服務地址,當前服務名勇皇,這里需要注意一點罩句,使用Ribbon負載均衡的時候服務名中不能使用下劃線,不然會找不到服務敛摘。
配置文件如下所示门烂。
server.port=10000
spring.application.name=springcloud-nacos-discovery-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
3.4 提供服務
創(chuàng)建一個Controller,提供一個方法進行測試兄淫,如下所示屯远。
package com.dalaoyang.controller;
import org.springframework.web.bind.annotation.*;
/**
* @author yangyang
* @date 2019/2/4
*/
@RestController
public class TestController {
@GetMapping("/test/{string}")
public String test(@PathVariable String string) {
return "Hello Nacos :" + string;
}
}
4 服務消費者
4.1 依賴配置
與服務提供者類似,在服務消費者加入SpringCloud-Nacos依賴和OpenFeign依賴捕虽,完整pom入夏所示慨丐。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.dalaoyang</groupId>
<artifactId>springcloud_nacos_discovery_consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springcloud_nacos_discovery_consumer</name>
<description>springcloud_nacos_discovery_consumer</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
4.2 啟動類
在啟動類加入注解@EnableDiscoveryClient并且開啟負載均衡,如下所示泄私。
package com.dalaoyang;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
public class SpringcloudNacosDiscoveryConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudNacosDiscoveryConsumerApplication.class, args);
}
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
4.3 配置文件
配置文件與提供者一致房揭,只是服務名不同,如下所示晌端。
server.port=10001
spring.application.name=springcloud-nacos-discovery-consumer
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
4.4 創(chuàng)建服務調用
創(chuàng)建一個Controller進行調用服務捅暴,如下所示。
package com.dalaoyang.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
/**
* @author yangyang
* @date 2019/2/4
*/
@RestController
public class TestConrtroller {
@Autowired
private RestTemplate restTemplate;
@GetMapping("test/{string}")
public String test(@PathVariable String string) {
return restTemplate.getForObject("http://springcloud-nacos-discovery-provider/test/" + string, String.class);
}
}
5 測試
分別啟動兩個服務咧纠,查看Nacos管理頁面蓬痒,如圖所示。
點擊詳情可以查看服務的詳細信息漆羔,如端口號乳幸,權重等,如圖所示钧椰。
接下倆在瀏覽器訪問http://localhost:10001/test/dalaoyang,遠程調用成功符欠。
6.源碼
服務提供者:https://gitee.com/dalaoyang/springcloud_learn/tree/master/springcloud_nacos_discovery_provider
服務消費者:https://gitee.com/dalaoyang/springcloud_learn/tree/master/springcloud_nacos_discovery_consumer