自从 Spirng Cloud Alibaba发布第一个Release以来,就备受国内开发者的重点关注,目前国内也有大量的开发者或企业团队开始小范围的试水,闲的蛋疼,我也打算试一波水。接下来看心情更新了。
什么是Nacos?
Nacos是个什么东东呢?
那就吧官方介绍搬过来咯!
Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
为什么我要放弃eureka使用Nacos呢?
A: 叫你用你就用,哪来的这么多F话。
B:领导安排我用, 我就用,我想学习前沿技术我就要用
个人理解:
因为eureka2.0不提供开源更新了
因为Nacos = eureka+config
1、安装Nacos
下载地址:https://github.com/alibaba/nacos/releases
步骤:下载->解压->启动
windows下启动nacos:cmd到解压后的目录,输入startup.cmd -m standalone
控制台输入如下代表启动成功:
,--.
,--.'|
,--,: : | Nacos
,`--.'`| ' : ,---. Running in stand alone mode, All function modules
| : : | | ' ,'\ .--.--. Port: 8848
: | \ | : ,--.--. ,---. / / | / / ' Pid: 10076
| : ' '; | / \ / \. ; ,. :| : /`./ Console: http://192.168.3.253:8848/nacos/index.html
' ' ;. ;.--. .-. | / / '' | |: :| : ;_
| | | \ | \__\/: . .. ' / ' | .; : \ \ `. https://nacos.io
' : | ; .' ," .--.; |' ; :__| : | `----. \
| | '`--' / / ,. |' | '.'|\ \ / / /`--' /
' : | ; : .' \ : : `----' '--'. /
; |.' | , .-./\ \ / `--'---'
'---' `--`---' `----'
启动完成之后访问http://127.0.0.1:8848/nacos/输入账号密码 默认都是nocos
2、服务提供者
- 创建一个springboot项目,命名为:alibaba-nacos-discovery-server(可自己随意命名 )
- 编辑pom.xml,加入必要的依赖。如下:
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.0.5.RELEASE
alibaba-nacos-discovery-server
alibaba-nacos-discovery-server
1.0-SNAPSHOT
org.springframework.cloud
spring-cloud-dependencies
Finchley.SR1
pom
import
org.springframework.cloud
spring-cloud-alibaba-dependencies
0.2.2.RELEASE
pom
import
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.projectlombok
lombok
1.18.2
true
- 创建应用主类,并实现一个HTTP接口:
package wuqilong.springcloud;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Wu_启龙
* @version 1.0
* @date 2020/7/10 16:56
*/
@SpringBootApplication
@EnableDiscoveryClient
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的形式在本机的不同端口上启动多个实例。
- 在启动都ok之后,我们可以访问Nacos的管理页面http://127.0.0.1:8848/nacos/来查看服务列表,此时可以看到如下内容:
image.png
服务消费者
接下来,实现一个应用来消费上面已经注册到Nacos的服务。
第一步: 创建一个Spring Boot应用,命名为:alibaba-nacos-discovery-client-common。
第二步:编辑pom.xml中的依赖内容,与上面服务提供者的一样即可。
第三步:创建应用主类,并实现一个HTTP接口,在该接口中调用服务提供方的接口。
@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中的负载均衡接口选取服务提供节点实现接口调用
* 这里使用了Spring Cloud Common中的LoadBalancerClient接口来挑选服务实例信息。
* 然后从挑选出的实例信息中获取可访问的URI,拼接上服务提供方的接口规则来发起调用。
*/
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;
}
}
}
- 第四步: 配置服务名称和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
可以看到,两次不同请求的时候,真正实际调用的服务提供者实例是不同的,也就是说,通过LoadBalancerClient接口在获取服务实例的时候,已经实现了对服务提供方实例的负载均衡。但是很明显,这样的实现还是比较繁琐,预告下后面的几篇,关于服务消费的几种不同姿势。
参考资料
Nacos官方文档
Nacos源码分析