SpringCloud Alibaba系列文章列表
0. SpringCloud Alibaba入门简介
1. SpringCloud Alibaba Nacos 之 服务注册中心
2. SpringCloud Alibaba Nacos 之 服务配置中心
3. SpringCloud Alibaba Nacos 之 集群
4. SpringCloud Alibaba Sentinel 服务限流熔断(万字长文)
文章目录
前言
官方文档:
https://nacos.io/zh-cn/docs/quick-start.html
https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/zh-cn/index.html#_spring_cloud_alibaba_nacos_discovery
1. Nacos简介
1.1 是什么
Nacos 是一个 Alibaba 开源的、易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
使用 Spring Cloud Alibaba Nacos Discovery,可基于 Spring Cloud 的编程模型快速接入 Nacos 服务注册功能。
Nacos是注册中心+配置中心的组合,等价于 Eureka + Config + Bus
1.2 能干嘛
- 服务注册中心
- 服务配置中心
1.3 去哪下
下载地址 : https://github.com/alibaba/nacos/releases
1.4 各种注册中心对比
服务注册与发现框架 | CAP模型 | 控制台管理 | 社区活跃度 |
Eureka | AP | 支持 | 低(2.x版本闭源) |
Zookeeper | CP | 不支持 | 中 |
Consul | CP | 支持 | 高 |
Nacos | AP/CP | 支持 | 高 |
2. 安装运行Nacos
当前以windows版本为例,下载nacos-server-1.4.0.zip
解压zip包,得到nacos文件夹
nacos/bin目录下,cmd命令行,执行命令
startup.cmd -m standalone (standalone代表着单机模式运行)
访问 http://127.0.0.1:8848/nacos , 用户名nacos,密码 nacos
登录成功如下图,则nacos启动成功。
3. 服务注册中心
3.1 简介
如上图,搭建
两个服务提供者 cloudalibaba-provider-payment9001、cloudalibaba-provider-payment9002
一个消费者 cloudalibaba-consumer-order83
通过Ribbon+ RestTemplate远程调用;(nacos自带负载均衡,因为依赖了ribbon)
3.2 服务提供者
新建子项目 cloudalibaba-provider-payment9001
- pom.xml
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
-
application.yml
server: port: 9001 spring: application: name: nacos-payment-provider cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #配置nacos地址 management: #暴露端口 endpoints: web: exposure: include: '*'
-
启动类
@EnableDiscoveryClient
-
业务类 Controller
@RestController public class PaymentController { @Value("${server.port}") private String serverPort; @GetMapping(value = "/payment/nacos/{id}") public String getPayment(@PathVariable("id") Integer id) { return "nacos registry, serverPort: "+ serverPort+"\t id"+id; } }
-
接口测试
启动nacos,启动cloudalibaba-provider-payment9001
查看nacos,服务列表,如下图注册成功;
浏览器访问 http://localhost:9001/payment/nacos/123
新建子模块cloudalibaba-provider-payment9002,代码和9001相同;只需要把application.yml中的server.port改成9002即可;
3.3 消费者
新建子模块cloudalibaba-consumer-order83
-
pom.xml
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
-
application.yml
server: port: 83 spring: application: name: nacos-consumer83 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 # nacos地址 register-enabled: false #不注册到nacos service-url: #非必要;定义要调用的服务地址,便于远程调用 nacos-payment-service: http://nacos-payment-provider
-
启动类
@EnableDiscoveryClient
-
RestTemplate配置类
@Configuration public class RestTempleteConfig { @Bean @LoadBalanced RestTemplate restTemplate(){ return new RestTemplate(); } }
-
业务类Controller
@RestController public class ConsumerController { @Autowired RestTemplate restTemplate; @Value("${service-url.nacos-payment-service}") private String serverURL; @GetMapping(value = "/consumer/payment/nacos/{id}") public String paymentInfo(@PathVariable("id") Long id) { return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class); } }
-
测试
启动cloudalibaba-consumer-order83
浏览器访问 http://localhost:83/consumer/payment/nacos/86 看看能否远程调用到服务提供者
-
负载均衡测试
启动cloudalibaba-provider-payment9002
浏览器多次访问 http://localhost:83/consumer/payment/nacos/86
发现9001和9002交替出现;
点赞+评论+关注
本文源码地址: https://gitee.com/shuaidawang/SpringCloudDemo.git
有错误的地方欢迎指正!可以加入qq交流群: 700637673