本文主要是介绍服务治理:Nacos 注册中心,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 一、什么是服务治理
- 二、Nacos 注册中心的核心功能 (★)
- 三、Nacos 环境搭建
- 3.1 本地部署
- 3.2 服务器部署
- 四、Nacos 应用实战
一、什么是服务治理
服务治理是微服务架构中最核心最基本的模块。⽤于实现各个微服务的⾃动化注册与发现。
服务注册:在服务治理框架中,都会构建⼀个注册中心,每个服务单元向注册中心登记自己提供服务的详细信息。并在注册中心形成⼀张服务的清单,服务注册中心需要以心跳的方式去监测清单中的服务是否可用,如果不可用,需要在服务清单中剔除不可用的服务。
服务发现:服务调⽤方向服务注册中心咨询服务,并获取所有服务的实例清单,实现对具体服务实例的访问。
通过上面的调用图会发现,除了微服务,还有⼀个组件是服务注册中心,它是微服务架构非常重要的⼀个组件,在微服务架构⾥主要起到了协调者的⼀个作⽤。注册中心⼀般包含如下几个功能:
- 服务发现
服务注册:保存服务提供者和服务调用者的信息;
服务订阅:服务调用者订阅服务提供者的信息,注册中心向订阅者推送提供者的信息。 - 服务健康检测
检测服务提供者的健康情况,如果发现异常,执行服务剔除。
二、Nacos 注册中心的核心功能 (★)
Nacos的作用就是⼀个注册中心,用来管理注册上来的各个微服务。核心功能点:
- 服务注册:Nacos Client 会通过发送 REST 请求想 Nacos Server 注册自己的服务,提供自身的元数据,比如:IP地址,端口等信息。Nacos Server 接收到注册请求后,就会把这些元数据存储到⼀个双层的内存Map中。
- 服务心跳:在服务注册后,Nacos Client 会维护⼀个定时心跳来维持统治 Nacos Server,说明服务⼀致处于可用状态,防止被剔除,默认 5s 发送⼀次心跳。
- 服务同步:Nacos Server 集群之间会相互同步服务实例,用来保证服务信息的⼀致性。
- 服务发现: 服务消费者(Nacos Client) 在调用服务提供的服务时,会发送⼀个 REST 请求给 Nacos Server,获取上面注册的服务清单,并且缓存在 Nacos Client 本地,同时会在 Nacos Client 本地开启⼀个定时任务拉取服务最新的注册表信息更新到本地缓存。
- 服务健康检查:Nacos Server 会开启⼀个定时任务来检查注册服务实例的健康情况,对于超过 15s 没有收到客户端心跳的实例会将他的 healthy 属性设置为 false (客户端服务发现时不会发现),如果某个实例超过 30s 没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)
注意:当服务启动好以后,服务订阅者通过服务发现将注册中心存储的服务信息拉取到本地缓存列表,当服务间调用时,通过网络调用,而不是通过注册中心。如:订单服务向商品服务发起请求的URL:http://product-service/product/{id}
,而 “product-service”
则会被替换成具体的商品服务的 IP 地址(具体替换细节,后面会详细说明)。
三、Nacos 环境搭建
3.1 本地部署
step1:安装Nacos
下载地址: https://github.com/alibaba/nacos/releases
下载zip格式的安装包,然后进⾏解压缩操作,上课使⽤的Nacos Server版本是1.3.2
step2:启动Nacos
切换到bin目录下,并执行以下命令
startup.cmd -m standalone
3.2 服务器部署
step1:上传文件,将nacos-server-1.3.2.zip
上传到/usr/local/software
step2:解压文件到指定目录
unzip /usr/local/software/nacos-server-1.3.2.zip -d /usr/local/
step3:启动nacos
sh /usr/local/nacos/bin/startup.sh -m standalone
step4:输入以下命令,查看到有nacos-server.jar
进程
jps
注:服务器需要暂时关闭防火墙 systemctl stop firewalld
,并可使用 firewall-cmd --state
查看防火墙状态。
具体可参考:Linux关闭防火墙命令
打开浏览器输⼊http://localhost:8848/nacos
(这里演示本地),即可访问服务, 默认账号和密码都是 nacos
四、Nacos 应用实战
1、将商品服务注册到 Nacos
<!-- nacos客户端依赖包 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2、在主类上添加@EnableDiscoveryClient注解
@SpringBootApplication
@EnableDiscoveryClient
public class ProductApplication {public static void main(String[] args) {SpringApplication.run(ProductApplication .class, args);}
}
3、在application.yml中添加Nacos服务的地址
spring:cloud:nacos:discovery: server-addr: localhost:8848
4、启动服务, 观察Nacos的控制⾯板中是否有注册上来的商品微服务
订单服务步骤同上,最终注册中心注册如下两个服务:
当订单服务创建订单,需要调用商品服务,代码如下(了解):
@Service
@Slf4j
public class OrderServiceImpl implements OrderService {@Autowiredprivate OrderDao orderDao;@Autowiredprivate DiscoveryClient discoveryClient;@Autowiredprivate RestTemplate restTemplate;@Overridepublic Order createOrder(Long productId, Long userId) {// 从nacos中获取服务地址List<ServiceInstance> instances = discoveryClient.getInstances("product-service");ServiceInstance instance = instances.get(0);String url = instance.getHost() + ":" + instance.getPort();log.info("从nacos中获取到的微服务地址为:" + url);// 远程调⽤商品微服务,查询商品信息Product product = restTemplate.getForObject("http://" + url + "/product/" + productId, Product.class);log.info("查询到{}号商品的信息,内容是:{}", productId, JSON.toJSONString(product));// 创建订单并保存Order order = new Order();order.setUid(userId);order.setUsername("叩丁狼教育");order.setPid(productId);order.setName(product.getName());order.setPrice(product.getPrice());order.setNumber(1);orderDao.save(order);log.info("创建订单成功,订单信息为{}", JSON.toJSONString(order));return order;}
}
以上代码存在问题 ServiceInstance instance = instances.get(0);
代码默认商品服务只有一台机器,如果商品服务做了集群呢?显然这样做不合理,所以可以自定义访问规则:
public Order createOrder(Long productId, Long userId) {// 从nacos中获取服务地址//⾃定义规则实现随机挑选服务List<ServiceInstance> instances = discoveryClient.getInstances("product-service");int index = new Random().nextInt(instances.size());ServiceInstance instance = instances.get(index);String url = instance.getHost() + ":" + instance.getPort();log.info("从nacos中获取到的微服务地址为:" + url);...}
效果类似如下:
文章参考:Java微服务商城高并发秒杀项目实战|Spring Cloud Alibaba真实项目实战+商城双11秒杀+高并发+消息+支付+分布式事物Seata
这篇关于服务治理:Nacos 注册中心的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!