微服务-(四)-服务发现-Nacos
一、前言在讲服务发现之前需要先普及两个名词的概念:有部分人更习惯将服务提供者称为服务端,服务消费者为客户端。二、原始的服务发现解决方案在没有服务发现组件之前,我们在项目中是怎么实现服务发现的呢?下面用MySQL做一下类比:现在我们有两个微服务,一个内容中心(服务消费者),一个用户中心(服务提供者),在服务启动时向数据库插入当前服务的服务名称、ip、端口、将状态设置为在线以及心...
一、前言
在讲服务发现之前需要先普及两个名词的概念:
有部分人更习惯将服务提供者称为服务端,服务消费者为客户端。
二、原始的服务发现解决方案
在没有服务发现组件之前,我们在项目中是怎么实现服务发现的呢?
下面用MySQL做一下类比:现在我们有两个微服务,一个内容中心(服务消费者),一个用户中心(服务提供者),在服务启动时向数据库插入当前服务的服务名称、ip、端口、将状态设置为在线以及心跳时间。
作为服务提供者的用户中心需要间隔一定周期向数据库插入心跳,以此来证明当前服务仍然处于活跃状态,如果用户中心在指定时间内没有发送心跳信息了(通过last_hearbeat判断),则认为该服务down了。
当作为服务消费者的内容中心调用用户中心服务之前需要先查询registry表的用户中心服务状态是否为up,为up则正常调用,如为down这不再调用该服务。
三、什么是Nacos?
官网文档:https://nacos.io/zh-cn/docs/what-is-nacos.html
什么是Nacos?官网文档已经解释的很清楚了,简单来讲,Nacos是一个服务发现组件,也是配置服务器,主要是帮我们解决了两个问题
- 服务发现:解决Service A怎么发现Service B的问题;
- 管理服务器的配置:
四、架构演进
加入Nacos后,我们的架构就演进为下图的结构。
微服务使用nacos client将自己加入到Nacos Server的管理中,由Nasoc Server来管理所有的微服务。
其实现逻辑与前面用Mysql做的类比非常类似的,只是原本我们手动在服务启动向数据库插入数据,服务关闭删除数据,以及上报心跳监控服务运行状态的工作,在我们加入nacos client后,全部由Nacos Server帮我们完成了。
五、整合Nacos
5.1 安装Nacos
官方文档:https://nacos.io/zh-cn/docs/quick-start.html
5.2加依赖
<dependencyManagement>
<dependencies>
<!--整合spring cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--整合spring cloud alibaba-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.9.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!--整合spring cloud alibaba nacos (版本号是跟着上面的spring cloud alibaba走的)-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
5.3写配置
spring:
cloud:
nacos:
discovery:
# 指定nacos server的地址
server-addr: localhost:8848
application:
# 指定服务名称:尽量用-,不要用_更不要用特殊字符
name: user-center
5.4Nacos控制台查看服务的列表
5.5查询服务实例
package com.itmuch.contentcenter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("")
public class TestController {
/**
* DiscoveryClient是Spring cloud提供的一个接口,可以用它来查询服务注册信息
*/
@Autowired
private DiscoveryClient discoveryClient;
/**
* 测试:内容中心总能找到用户新增的实例
* @return 用户中心的所有实例
*/
@GetMapping("getInstances")
public List<ServiceInstance> getInstances(){
return this.discoveryClient.getInstances("user-center");
}
}
console->
[
{
"serviceId": "user-center",
"host": "192.168.9.56",
"port": 8040,
"secure": false,
"metadata": {
"nacos.instanceId": "192.168.9.56#8040#DEFAULT#DEFAULT_GROUP@@user-center",
"nacos.weight": "1.0",
"nacos.cluster": "DEFAULT",
"nacos.healthy": "true",
"preserved.register.source": "SPRING_CLOUD"
},
"uri": "http://192.168.9.56:8040",
"scheme": null,
"instanceId": null
},
{
"serviceId": "user-center",
"host": "192.168.9.56",
"port": 8050,
"secure": false,
"metadata": {
"nacos.instanceId": "192.168.9.56#8050#DEFAULT#DEFAULT_GROUP@@user-center",
"nacos.weight": "1.0",
"nacos.cluster": "DEFAULT",
"nacos.healthy": "true",
"preserved.register.source": "SPRING_CLOUD"
},
"uri": "http://192.168.9.56:8050",
"scheme": null,
"instanceId": null
}
]
更多推荐
所有评论(0)