Nacos介紹
Nacos是阿里出品的幫助發(fā)現(xiàn)床牧、配置和管理微服務的一款產(chǎn)品,而且這應該是所有服務發(fā)現(xiàn)與管理產(chǎn)品中中文文檔最為友好的遭贸,你完全直接去官網(wǎng)查看戈咳,中文手冊用起來就是爽!
本文主要會快速上手入門使用Nacos,并結合項目(Spring Cloud)來進行開發(fā)。
安裝Nacos
下載對應系統(tǒng)的包著蛙,windows下雙擊 startup.cmd 即可運行删铃,運行成功如圖,默認為8848端口
Nacos默認提供了控制臺管理册踩,訪問地址:http://127.0.0.1:8848/nacos 可以看到:
默認用戶命和密碼都為:nacos泳姐,登錄進入后可看到管理界面
服務發(fā)現(xiàn)
以下為 Nacoas 提供的一個服務發(fā)現(xiàn)的說明圖。
創(chuàng)建工程
創(chuàng)建provider項目:leon-provider暂吉,指定Spring Boot版本為1.5.21胖秒,然后添加Nacos的相關依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${latest.version}</version>
</dependency>
這里需要注意各個版本的對應關系
我們的spring boot是屬于1.5.X的序列,所以對應的spring cloud的版本為:Spring Cloud Edgware 慕的。
本位中使用的Nacos的版本為1.0.0阎肝,所以注意,如果需要引入spring cloud alibaba的相關依賴肮街,那么就只能為特定三個版本风题。本文中使用0.1.2版本
在leon-provider中添加spring cloud 的相關依賴
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR5</spring-cloud.version>
</properties>
<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>
如果需要使用 Spring Cloud Edgware 版本,請在 dependencyManagement 中添加如下內容
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.1.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
指定Nacos相關依賴版本為0.1.2
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR5</spring-cloud.version>
<latest.version>0.1.2.RELEASE</latest.version>
</properties>
配置Nacos服務地址
在application.yml中配置Nacos服務信息:
server:
port: 8080
spring:
application:
name: leon-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
給啟動類添加注解:
@EnableDiscoveryClient
啟動程序嫉父,運行成功后沛硅,可以看到Nacos中已經(jīng)有了注冊信息:
點擊詳情后可查看當前服務的IP、端口绕辖、健康狀態(tài)等信息摇肌。
在leon-provider工程中創(chuàng)建LoginService類,提供簡單的登錄方法:
@RestController
public class LoginService {
@RequestMapping("/login")
public String login(@RequestParam("userName") String userName, @RequestParam("passWord") String passWord) {
if (userName.equals("leon") && passWord.equals("888")) {
return "leon-provider: login success";
}
return "leon-provider: login fail";
}
}
創(chuàng)建Consumer工程
創(chuàng)建leon-consumer工程仪际,指定spring boot围小、Spring cloud版本和leon-provider一致,同時添加spring cloud feign依賴(關于Feign本文不在贅述)
添加Nacos的服務端IP和端口信息树碱,
server:
port: 8081
spring:
application:
name: leon-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
在leon-consumer中創(chuàng)建Feign Client,通過name屬性定義想要調用的服務名稱
@FeignClient(name = "leon-provider")
public interface UserFeignClient {
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(@RequestParam("userName") String userName, @RequestParam("passWord") String passWord);
}
創(chuàng)建Controller類并調用接口
@RestController
public class UserController {
@Autowired
private UserFeignClient userFeignClient;
/**
* 用戶賬號名和密碼登錄
*
* @param userName
* @param passWord
* @return
*/
@RequestMapping("/login")
public String login(@RequestParam("userName") String userName, @RequestParam("passWord") String passWord) {
return userFeignClient.login(userName, passWord);
}
}
在啟動類上添加注解 @EnableFeignClients肯适,然后運行l(wèi)eon-consumer服務。刷新控制臺成榜,可以看到注冊服務有兩個:
訪問leon-consumer中的login接口框舔,查看是否能正常調用leon-provider服務。
管理服務
在控制臺中赎婚,選擇leon-provider服務雨饺,進入詳情后,可以選擇將其下線
下線后再次訪問接口惑淳,可以發(fā)現(xiàn)已經(jīng)找不到對應的服務了额港。通過配置的方式可以優(yōu)雅的實現(xiàn)服務上、下線歧焦。
注意
服務通過控制臺下線移斩,只是代表會在訂閱端過濾掉肚医,在控制臺不受影響,所以即使下線服務向瓷,在控制臺依然顯示是健康的實例肠套。如果我們停掉服務,就會發(fā)現(xiàn)變成紅色為非健康實例了
配置中心
Nacos同樣提供了線上配置服務猖任,新增配置
點擊發(fā)布完成配置你稚,然后返回可查看
在項目中添加依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${latest.version}</version>
</dependency>
在Controller中添加方法
@Value("${name:}")
private String name;
@Value("${age:}")
private String age;
@RequestMapping("/config")
public String config() throws NacosException {
return name + " | " + age;
}
運行程序訪問
注意
- 其中dataId的名字需要和spring.application.name保持一致(出去后綴)
- 添加@RefreshScope注解才能實現(xiàn)動態(tài)刷新
- 配置服務的參數(shù)必須配置在bootstrap文件中