本篇參考程序猿DD的Spring Cloud Alibaba博客,地址為:http://blog.didispace.com/spring-cloud-alibaba-1/
什么是Nacos
Nacos致力于幫助您發(fā)現(xiàn)瞧壮、配置和管理微服務(wù)。Nacos提供了一組簡(jiǎn)單易用的特性集式曲,幫助您快速實(shí)現(xiàn)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置缸榛、服務(wù)元數(shù)據(jù)及流量管理吝羞。Nacos幫助您更敏捷和容易地構(gòu)建、交付和管理微服務(wù)平臺(tái)内颗。Nacos是構(gòu)建以“服務(wù)”為中心的現(xiàn)代應(yīng)用架構(gòu) (例如微服務(wù)范式钧排、云原生范式) 的服務(wù)基礎(chǔ)設(shè)施。
在接下里的教程中均澳,將使用Nacos作為微服務(wù)架構(gòu)中的注冊(cè)中心(替代:eurekba恨溜、consul等傳統(tǒng)方案)以及配置中心(spring cloud config)來(lái)使用。
啟動(dòng)Nacos
在官網(wǎng)下載好Nacos安裝包负懦,然后解壓
Nacos1.0版本需要使用0.2.2client端筒捺,否則會(huì)報(bào)錯(cuò)
- Mac/Linux:
sh startup.sh -m standalone
- Windows:
cmd startup.cmd -m standalone
啟動(dòng)之后,訪問(wèn)http://127.0.0.1:8848/nacos打開(kāi)Nacos控制臺(tái)
用戶名/密碼:nacos
新建服務(wù)提供方
第一步: 創(chuàng)建SpringBoot應(yīng)用:nacos-server-demo
第二步: pom文件引入jar包
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR1</spring-cloud.version>
</properties>
<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.6</version>
<scope>provided</scope>
</dependency>
</dependencies>
<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>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
第三步: 創(chuàng)建應(yīng)用主類
@EnableDiscoveryClient
@SpringBootApplication
public class NacosServerDemoApplication {
public static void main(String[] args) {
SpringApplication.run(NacosServerDemoApplication.class, args);
}
@Slf4j
@RestController
static class HelloController {
@GetMapping("/hello")
public String hello(@RequestParam String name) {
return String.format("hello %s", name);
}
}
}
第四步: 配置Nacos地址以及應(yīng)用名
spring.application.name=nacos-server-demo
server.port=8001
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
第五步: 啟動(dòng)兩個(gè)nacos-server-demo
項(xiàng)目纸厉,端口分別為8001,8002
如果我們看到以下日志,證明nacos注冊(cè)成功
2019-04-01 15:25:47.421 INFO 82708 --- [ main] o.s.c.a.n.registry.NacosServiceRegistry : nacos registry, nacos-server-demo 10.0.75.1:8002 register finished
訪問(wèn)Nacos控制臺(tái)http://127.0.0.1:8848/nacos
可以看到服務(wù)已經(jīng)注冊(cè)到Nacos中
新建服務(wù)調(diào)用方
第一步: 創(chuàng)建SpringBoot應(yīng)用:nacos-client-demo
第二步: pom文件引入jar包五嫂,同上
第三步: 創(chuàng)建應(yīng)用主類
@EnableDiscoveryClient
@SpringBootApplication
public class NacosClientDemoApplication {
public static void main(String[] args) {
SpringApplication.run(NacosClientDemoApplication.class, args);
}
@Slf4j
@RestController
static class TestController {
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/test")
public String test() {
ServiceInstance instance = loadBalancerClient.choose("nacos-server-demo");
String url = instance.getUri() + "/hello?name=" + "clay";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(url, String.class);
return String.format("invoke url = %s, result = %s", url, result);
}
}
}
第四步: 配置Nacos服務(wù)地址以及應(yīng)用名稱
spring.application.name=nacos-client-demo
server.port=9000
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
第五步: 請(qǐng)求client端颗品,可以看到請(qǐng)求到不同的server端
$ curl 127.0.0.1:9000/test
invoke url = http://192.168.1.103:8002/hello?name=clay, result = Hello clay
$ curl 127.0.0.1:9000/test
invoke url = http://192.168.1.103:8001/hello?name=clay, result = Hello clay