使用Nacos實現(xiàn)服務(wù)注冊與發(fā)現(xiàn)

什么是Nacos?

引入官方的一段話:Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務(wù)。Nacos 提供了一組簡單易用的特性集,幫助您快速實現(xiàn)動態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)元數(shù)據(jù)及流量管理。
Nacos 幫助您更敏捷和容易地構(gòu)建、交付和管理微服務(wù)平臺。 Nacos 是構(gòu)建以“服務(wù)”為中心的現(xiàn)代應(yīng)用架構(gòu) (例如微服務(wù)范式、云原生范式) 的服務(wù)基礎(chǔ)設(shè)施。

Nacos是Alibaba開源的一套微服務(wù)的治理方案,文檔有中文版的,詳情請看:
Nacos官方文檔,這里就不啰嗦了...

Nacos的安裝過程

首先來到官網(wǎng)如:Nacos下載地址,我們只需要下載nacos-server即可,直接下載zip的解壓即可,如圖:

微信截圖_20191022174346.png

解壓之后我們來看看項目結(jié)構(gòu):

微信截圖_20191022180146.png

bin目錄下是各大平臺的對于Nacos的啟動命令,當我們啟動對應(yīng)的命令時實質(zhì)是在調(diào)用target目錄的jar,猿友們可以自己去看,解壓之后我們來啟動它,命令如下:

startup.sh -m standalone

注意:前期是通過cmd切換到Nacos的bin目錄下,我們來看一下啟動的結(jié)果圖:

微信截圖_20191022181009.png

上圖是在啟動的過程中的一個截圖,可以發(fā)現(xiàn)Nacos的很洋氣的端口8848,等啟動完成后,我們訪問 http://localhost:8848/nacos/index.html進入它的管理臺如圖:

微信截圖_20191022181613.png

需要我們輸入用戶名和密碼驗證,默認都是nacos,之后來到管理臺,如圖:

微信截圖_20191022181922.png

至此我們的Nacos安裝完畢

構(gòu)建服務(wù)

創(chuàng)建項目名為alibaba-nacos-producer作為服務(wù)的提供者

  • 在pom.xml文件中,代碼如下:
<dependencies>
    <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>
</dependencies>

<dependencyManagement>
<dependencies>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>Finchley.SR1</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>0.2.2.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
  • 配置文件中,代碼如下:
server:
  port: 8080
spring:
  application:
  name: alibaba-nacos-producer
cloud:
nacos:
  discovery:
    server-addr: localhost:8848
  • 在我們的啟動類上需要貼上注解EnableDiscoveryClient,這樣Nacos會發(fā)現(xiàn)服務(wù),代碼如下:
package com.cacmo.alibaba.nacos.producer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @author cb
 */
@SpringBootApplication
@EnableDiscoveryClient
public class AlibabaNacosProducerApplication {

public static void main(String[] args) {
    SpringApplication.run(AlibabaNacosProducerApplication.class, args);
}

啟動服務(wù),打開Nacos控制臺,如圖:

微信截圖_20191022143750.png

發(fā)現(xiàn)我們的服務(wù)并沒有注冊進來,郁悶了很久,后來查看了對應(yīng)各自的版本,才知道問題在哪了,我們來看下當前配置的版本,如圖:

微信截圖_20191022143247.png

微信截圖_20191022143339.png

由上圖我們發(fā)現(xiàn)我的springboot版本為2.2.0,而springcloud的版本為Finchleny.SR1版本的,在官方中的要求是這樣說明的,我們來看圖:

微信截圖_20191022214542.png

所以,我這里需要用springcloud版本為Greenwich,再一次的啟動我們的服務(wù)看是否注冊進去.

微信截圖_20191022215318.png

從上圖可以看到我們的服務(wù)已經(jīng)注冊進去,我們來寫一個接口供消費者來調(diào)用,代碼如下:

package com.cacmo.alibaba.nacos.producer.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author cb
 */

@RestController
public class HelloController {

@RequestMapping("hello")
public String hello(String name){

    return "hello:"+name;

}

接著我們來創(chuàng)建服務(wù)的消費方,我這里服務(wù)名為alibaba-nacos-consumer,建的過程和服務(wù)提供方一樣,這里就不在貼pom文件了,來看配置文件,代碼入下:

server:
  port: 9000
spring:
  application:
name: alibaba-nacos-consumer
cloud:
nacos:
  discovery:
    server-addr: localhost:8848

接著我們寫一個調(diào)用服務(wù)方的接口代碼,如下:

package com.cacmp.alibaba.nacos.consumer.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * @author cb
 */

@RestController
public class ConsumerController {

@Autowired
private LoadBalancerClient loadBalancerClient;
@Autowired
private RestTemplate restTemplate;
@RequestMapping("consumer")
public String consumer(){

    ServiceInstance serviceInstance = loadBalancerClient.choose("alibaba-nacos-producer");
    String uri = serviceInstance.getUri().toString();

    String object = restTemplate.getForObject(uri + "/hello?name="+"nacos!", String.class);
    System.out.println(object);
    return object;

}

啟動我們的消費者項目,同樣我們將它也注冊到Nacos中,訪問http://localhost:9000/consumer,我們會看到如下結(jié)果:

微信截圖_20191022220814.png
微信截圖_20191022220930.png

關(guān)于Nacos的簡單使用就是這樣的.......,最后附上本案例的代碼示例:

代碼示例

Gitee:https://gitee.com/cblove_java/nacos_learning_demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容