Nacos上手實踐(基於Spring Cloud)

Nacos介紹

Nacos是阿里出品的幫助發現、配置和管理微服務的一款產品,並且這應該是全部服務發現與管理產品中中文文檔最爲友好的,你徹底直接去官網查看,中文手冊用起來就是爽!java

本文主要會快速上手入門使用Nacos,並結合項目(Spring Cloud)來進行開發。spring

安裝Nacos

下載對應系統的包,windows下雙擊 startup.cmd 便可運行,運行成功如圖,默認爲8848端口 bootstrap

Nacos默認提供了控制檯管理,訪問地址:http://127.0.0.1:8848/nacos 能夠看到: windows

默認用戶命和密碼都爲:nacos,登陸進入後可看到管理界面app

服務發現

如下爲 Nacoas 提供的一個服務發現的說明圖。 ide

echo service

建立工程

建立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>
複製代碼

這裏須要注意各個版本的對應關係 spa

咱們的spring boot是屬於1.5.X的序列,因此對應的spring cloud的版本爲:Spring Cloud Edgware 。 本位中使用的Nacos的版本爲1.0.0,因此注意,若是須要引入spring cloud alibaba的相關依賴,那麼就只能爲特定三個版本。本文中使用0.1.2版本3d

在leon-provider中添加spring cloud 的相關依賴code

<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中已經有了註冊信息:

點擊詳情後可查看當前服務的IP、端口、健康狀態等信息。

在leon-provider工程中建立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";
    }
}

複製代碼

建立Consumer工程

建立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中建立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);
}

複製代碼

建立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,而後運行leon-consumer服務。刷新控制檯,能夠看到註冊服務有兩個:

訪問leon-consumer中的login接口,查看是否能正常調用leon-provider服務。

管理服務

在控制檯中,選擇leon-provider服務,進入詳情後,能夠選擇將其下線

下線後再次訪問接口,能夠發現已經找不到對應的服務了。經過配置的方式能夠優雅的實現服務上、下線。

注意

服務經過控制檯下線,只是表明會在訂閱端過濾掉,在控制檯不受影響,因此即便下線服務,在控制檯依然顯示是健康的實例。若是咱們停掉服務,就會發現變成紅色爲非健康實例了


配置中心

Nacos一樣提供了線上配置服務,新增配置



點擊發布完成配置,而後返回可查看

在項目中添加依賴:

<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註解才能實現動態刷新
  • 配置服務的參數必須配置在bootstrap文件中
相關文章
相關標籤/搜索