问题:
如果服务提供者的地址发生改变,怎么办?如何能让服务消费者感知服务提供者的改变呢?这就是需要服务发现机制,同时需要一个组件,就是注册中心。
每一个服务都会在一定时间向注册中心发送一次心跳,来保证服务的正常使用。
nacos是一个服务组件,可以作为服务注册中心使用,还可以管理配置使用。
搭建nacos服务
我们搭建的nacos-server需要与nacos-client兼容,我们这里有一个技巧来查看我们应该使用哪个版本的nacos-server。
首先在配置文件中找到spring-cloud-alibaba-dependencies,按住Ctrl点击进去之后,搜索nacos,就会找到一个<nacos.client.version>1.1.1</nacos.client.version>,我们的nacos-server版本和这个版本保持一致就可以了。
接下来我们就可以启动nacos服务了【参考官网】,然后访问http://127.0.0.1:8848/nacos/index.html,将ip换成实际情况的就可以了。然后会跳出来一个登陆页面,账号和密码都输入nacos就可以登录了。
登录页面
登录成功页
这样我们的nacos-server就搭建完成了。。。
整合nacos
第一步:添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
第二步:添加注解
在启动类上面添加@EnableDiscoveryClient
因为新版本做了相应的改造,所以这个注解可以不加
第三步:添加配置
spring:
cloud:
nacos:
discovery:
#指定nacos服务地址,前面不需要加http://
server-addr: 127.0.0.1:8848
application:
#服务名称。这里不要用_或者特殊字符,用中划线-
name: user-center
如果这一步在注解里面不添加服务名称,在注册中心是找不到的。。。
最后启动项目,打开nacos客户端,就可以看见服务注册到注册中心了。结果如下图:
注册成功结果
这里扩展一下,Spring Cloud 提供了一个服务接口DiscoveryClient,里面有两个方法比较实用,一个是查询指定服务的所有实例信息的getInstances接口,另一个是查询该注册中心有多少个服务getServices()接口,直接写到自己的测试代码里就可以查看该注册中心上面的信息了。代码如下:
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("getInstances")
public List<ServiceInstance> getInstances(){
//查询指定服务的所有实例信息
//无论使用什么做注册中心都可以使用consul、eureka、zookeeper
return discoveryClient.getInstances("user-center");
}
@GetMapping("getServices")
public List<String> getServices(){
//查询该注册中心有多少个服务
return discoveryClient.getServices();
}
服务发现的领域模型
image.png
image.png
Namespace:实现隔离,在不同的Namespace下面的微服务之间是访问不通的。可以用于区分环境使用。比如开发、测试、生产各一套环境。
Service:指的是nacos服务,可以将服务注册到上面的一个注册中心
Cluster:指定集群名称。可以将同一个微服务部署多个集群,例如南京集群、北京集群等
Instance:每个微服务实例
元数据
什么是元数据?
官网描述:Nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签 (label),从作用范围来看,分为服务级别的元信息、集群的元信息及实例的元信息。
在控制台设置元数据的方法如下图:
image.png
元数据的作用
1、提供描述信息
2、让微服务调用更加灵活(例如:微服务版本控制)





