前言
目前国内主要都是使用 SpringcloudAlibaba的Nacos组件 来搭建服务注册中心和配置中心,本文主要介绍Nacos作为服务中心和配置中心的基本使用。
服务注册
使用Nacos的服务注册功能后,我们可以不用自己搭建服务端了,Nacos本身就已经提供了服务端的实现。我们只需要把微服务注册到Nacos服务端即可,并且Nacos本身还集成了Ribbon,所以也具有负载均衡的功能。
服务提供者
-
导入依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
-
在yml文件添加如下配置
spring: application: name: nacos-provider-payment9001 cloud: nacos: discovery: server-addr: localhost:8848 #配置nacos地址
-
主启动类添加注解
package cn.pigman.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class NacosDiscoveryMain9001 { public static void main(String[] args) { SpringApplication.run(NacosDiscoveryMain9001.class, args); } }
服务消费者
-
导入依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
-
在yml文件添加如下配置
server: port: 83 spring: application: name: nacos-consumer-order83 cloud: nacos: discovery: server-addr: localhost:8848 #消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者) service-url: nacos-user-service: http://nacos-provider-payment9001
-
主启动类添加注解
package cn.pigman.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class NacosOrderMain83 { public static void main(String[] args) { SpringApplication.run(NacosOrderMain83.class, args); } }
-
配置类
package cn.pigman.springcloud.config; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class ApplicationContextBean { @Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
-
测试业务类controller
@RestController @RequestMapping("/order") @Slf4j public class OrderController { @Autowired private RestTemplate restTemplate; @Value("${service-url.nacos-user-service}") private String serverUrl; @GetMapping("/consumer/payment/nacos/{id}") public String paymentInfo(@PathVariable("id") Long id) { return restTemplate.getForObject(serverUrl+"/payment/nacos/"+id,String.class); } }
配置中心
Nacos不仅帮我们搭建好了服务注册中心,还帮我们搭建好了配置中心,我们只需要将微服务注册到Nacos上面,并且在Nacos上面创建好配置文件,就可以让微服务读取配置文件。
集群和持久化配置
Nacos默认内嵌了一个数据库Derby
,我们在Nacos上的一些需要持久化的数据(创建的配置文件)都会被保存到该数据库中。但在集群的环境下,实现Derby来保存数据可能会出现数据不一致的问题,所以最好还是修改一下Nacos持久化的配置。
Nacos支持我们将其内嵌的Derby数据库换成Mysql(值支持Mysql)来进行持久化的操作。
基于Linux搭建集群Nacos
-
执行 nacos-server-1.4.4\nacos\conf 目录下的nacos-mysql.sql文件
-
在application.properties文件添加如下配置
spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://192.168.228.132:3306/nacos_config&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=UTC db.user=root db.password=lzb
-
配置nacos集群配置文件 cluster.conf
192.168.228.132:3333 192.168.228.132:4444 192.168.228.132:5555
-
修改Nacos的启动脚本,使其能够接收不同的端口
-
分别以不同端口启动三台Nacos服务
-
修改nginx配置文件,让其作为负载均衡器
upstream cluster{ server 127.0.0.1:3333; server 127.0.0.1:4444; server 127.0.0.1:5555; } server { listen 1111; server_name localhost; location / { proxy_pass http://cluster; } }
-
启动Nginx
./nginx -c /usr/local/nginx/conf/nginx.conf
-
测试通过Nginx访问Nacos