首先蒟蒻先放上一則新聞:
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