Nacos服务注册与发现
Nacos是阿里巴巴开源的微服务组件,用于服务注册与发现以及全局配置,本文主要介绍其服务注册及发现的用法。
官网地址:https://nacos.io/
源码地址:https://github.com/alibaba/nacos
如果要测试Nacos组件,同样需要开启至少三个服务,分别是Nacos Server,服务提供者、服务消费者。
1. 启动Nacos Server
(1) 从github上下载 nacos1.4.1
(2) 编译
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
(3) Linux/Unix/Mac下运行
启动命令(standalone代表着单机模式运行,非集群模式): sh startup.sh -m standalone
(4) 在浏览器输入 . http://127.0.0.1:8848/nacos 可以查看服务情况
2. 服务提供者,向Nacos Server注册服务
(1) pom 文件添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
(2) 启动主类上添加注解
@EnableDiscoveryClient
(3) application.yml添加 nacos 配置
spring:
application:
name: "common-sys"
datasource:
driverClassName: "com.mysql.cj.jdbc.Driver"
url: "jdbc:mysql://xxx.yyy.xxx.ttt:3316/nanhai?allowMultiQueries=true"
username: "root"
password: "root"
cloud:
nacos:
discovery:
server-addr: "nanhai.com.cn:9090"
server:
port: 7070
3. 消费者访问服务,消费的方式有多种,可以用openFeign,可以和nacos官网案例中的NamingService实例,也可以用RestTemplate,下面我用
RestTemplate来演示服务间的调用 ,这个案例演示一个服务如何通过注册中心去调用/hello这个服务
@LoadBalanced @Bean public RestTemplate restTemplate(){ return new RestTemplate() ; //这个restTemplate具有负载均衡的能力 } @Autowired private RestTemplate restTemplate ; @Autowired LoadBalancerClient loadBalancerClient; @RequestMapping("/test")
public String testHello(){ //ServiceInstance serviceInstance = loadBalancerClient.choose("common-sys"); String url = "http://common-sys" + /*serviceInstance.getInstanceId() + */"/hello" ; //commons-sys是注册到注册中心的服务名 System.out.println( "--------" + url); String result = restTemplate.getForObject( url , String.class); return result ; }