蒟蒻のspringcloud小窩(放下eureka體驗一下alibaba的nacos!)

首先蒟蒻先放上一則新聞:
springcloud核心成員加盟阿里springcloud,爲打造中國springcloud服務!

什麼是Nacos

Nacos致力於幫助您發現、配置和管理微服務。Nacos提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。Nacos幫助您更敏捷和容易地構建、交付和管理微服務平臺。Nacos是構建以“服務”爲中心的現代應用架構 (例如微服務範式、雲原生範式) 的服務基礎設施。

在接下里的教程中,將使用Nacos作爲微服務架構中的註冊中心(替代:eurekba、consul等傳統方案)以及配置中心(spring cloud config)來使用。
github上的下載鏈接:阿里
最新的springcloud在本文發表前的21 days發佈了1.2.1版本,蒟蒻用的是1.0.0也是第一個生產用版本(當然也用過第一個穩定版本0.8的)~。
在這裏插入圖片描述
直接啓動bin目錄下的start.cmd文件即可,sh經瞭解是linux和macos的~
在這裏插入圖片描述
就是這個,然後打印寫日誌,沒什麼用~
啓動完成之後,訪問:http://127.0.0.1:8848/nacos/,可以進入Nacos的服務管理頁面,具體如下;

在這裏插入圖片描述
0.8是有登陸界面的,username和password都是nacos,1.0捨棄了登陸。
下面開始:
構建應用接入Nacos註冊中心
在完成了Nacos服務的安裝和啓動之後,下面我們就可以編寫兩個應用(服務提供者與服務消費者)來驗證服務的註冊與發現了。
隨便創建一個springboot應用。
編輯pom.xml,加入必要的依賴配置,比如:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<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>

<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>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.2</version>
        <optional>true</optional>
    </dependency>
</dependencies>

不叨叨了,最近了解了一個gradle配置的項目,所以順便看了下gradle,在此宣傳一下:比maven更簡潔的操作和支持maven配置(聽起來很NB),當然這也是我無意中發現的,idea可以直接下,80M這樣子~
創建應用主類,並實現一個HTTP接口:

@EnableDiscoveryClient
@SpringBootApplication
public class TestApplication {

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

    @Slf4j
    @RestController
    static class TestController {
        @GetMapping("/hello")
        public String hello(@RequestParam String name) {
            log.info("invoked name = " + name);
            return "hello " + name;
        }
    }
}

配置服務名稱和Nacos地址

spring.application.name=alibaba-nacos-discovery-server
server.port=8001

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

啓動上面創建的應用。可以在啓動時候增加-Dserver.port=8001的形式在本機的不同端口上啓動多個實例。

在應用啓動好之後,我們可以在控制檯或日誌中看到如下內容,代表已經註冊成功:

INFO 10476 --- [           main] o.s.c.a.n.registry.NacosServiceRegistry  : nacos registry, alibaba-nacos-discovery-server 10.123.18.216:8001 register finished

在啓動都ok之後,我們可以訪問Nacos的管理頁面http://127.0.0.1:8848/nacos/來查看服務列表,此時可以看到如下內容
在這裏插入圖片描述
服務消費者

@EnableDiscoveryClient
@SpringBootApplication
public class TestApplication {

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

    @Slf4j
    @RestController
    static class TestController {

        @Autowired
        LoadBalancerClient loadBalancerClient;

        @GetMapping("/test")
        public String test() {
            // 通過spring cloud common中的負載均衡接口選取服務提供節點實現接口調用
            ServiceInstance serviceInstance = loadBalancerClient.choose("alibaba-nacos-discovery-server");
            String url = serviceInstance.getUri() + "/hello?name=" + "didi";
            RestTemplate restTemplate = new RestTemplate();
            String result = restTemplate.getForObject(url, String.class);
            return "Invoke : " + url + ", return : " + result;
        }
    }
}

這裏使用了Spring Cloud Common中的LoadBalancerClient接口來挑選服務實例信息。然後從挑選出的實例信息中獲取可訪問的URI,拼接上服務提供方的接口規則來發起調用~
配置服務名稱和Nacos地址,讓服務消費者可以發現上面已經註冊到Nacos的服務。

spring.application.name=alibaba-nacos-discovery-client-common
server.port=9000

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

啓動服務消費者,然後通過curl或者postman等工具發起訪問,下面以curl爲例:
$ curl localhost:9000/test
Invoke : http://10.123.18.216:8001/hello?name=didi, return : hello didi
$ curl localhost:9000/test
Invoke : http://10.123.18.216:8002/hello?name=didi, return : hello didi
沒錯就是搜索的crul…
up:原來eureka2.x版本已經閉源了。。。—21:06

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章