栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Alibaba微服务组件——Nacos服务注册中心,从0到0.5

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Alibaba微服务组件——Nacos服务注册中心,从0到0.5

目录

一,SpringCloud Alibaba简介

二,Nacos简介

三,主流注册中心比较

四,安装运行Nacos

1,下载

2,解压

3,以单机模式启动nacos

 4,查看日志文件

 5,进入控制台

五,单机模式部署

1,创建父项目

2,创建两个服务

3,引入相关依赖

4,配置nacos

5,启动两个服务

 6,在调用服务端添加负载均衡器注解

7,在调用服务端设置调用路径

8,浏览器访问

六、重要概念

1,服务名

2,服务

 3,服务分组

 4,命名空间

 5,健康检查

七、集群模式部署

1,准备三台服务器

2,配置外源数据库

3,配置集群节点

 4,创建mysql数据库nacos,并执行脚本confnacos-msyql.sql

5,如果出现内存不足

6,启动nacos

7,浏览器查看         

八, nginx配置反向代理

1,nginx配置

2,浏览器访问

 3,修改客户端配置 


一,SpringCloud Alibaba简介

Spring Cloud Alibaba为分布式应用开发提供一站式解决方案。它包含开发分布式应用程序所需的所有组件,可以轻松使用Spring Cloud开发应用程序。

有了Spring Cloud Alibaba,只需要添加一些注释和少量配置,就能将Spring Cloud应用连接到阿里巴巴的分布式解决方案,用阿里巴巴的中间件构建分布式应用系统。

主要功能:

  • 服务限流降级:通过Alibabasentinel实现流量控制、限流降级和系统自适应保护;默认支持 WebServlet、WebFlux、OpenFeign、RestTemplate、Spring Cloud Gateway、Zuul、Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。

  • 服务注册与发现:通过Alibaba Nacos注册实例,适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。

  • 分布式配置管理:使用Alibaba Nacos作为数据存储

  • 消息驱动能力:基于 Spring Cloud Stream RocketMQ为微服务应用构建消息驱动能力。

  • 消息总线:使用Spring Cloud Bus RocketMQ的分布式系统的链接节点

  • 分布式事务:通过Seata支持高可用和易用性的分布式事务解决方案

  • 阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。

  • 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。

  • 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

SpringCloud NetFlix项目进入维护模式,不在开发新的组件和功能,故现在主流使用SpringCloud Alibaba。

二,Nacos简介

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

一个更易于构建云原生应用的动态服务发现,配置管理和服务管理中心

Nacos就是 注册中心+配置中心+服务管理 的组合

三,主流注册中心比较

四,安装运行Nacos

Nacos 依赖 java 环境来运行,需要安装JDK。

如果是从代码开始构建并运行Nacos,还需要为此配置 maven 环境,请确保是在以下版本环境中安装使用:

  1. 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  2. 64 bit JDK 1.8+;
  3. Maven 3.2.x+;

1,下载

Release 2.0.3 (July 28, 2021) · alibaba/nacos · GitHub

2,解压
tar -zxvf nacos-server-2.0.3.tar.gz

3,以单机模式启动nacos

进入nacos/bin目录中:

./startup.sh -m standalone

 4,查看日志文件

 5,进入控制台

从日志可知,控制台地址为:http://192.168.72.129:8848/nacos

 默认用户名密码都是:nacos

注意:记得linux防火墙放行8848端口

#查看防火墙规则
firewall-cmd --list-all

#查询端口是否开放
firewall-cmd --query-port=8848/tcp

#关闭端口(--permanent参数表示设置为永久)
firewall-cmd --permanent --remove-port=8848/tcp

#1,开启端口
firewall-cmd --permanent --add-port=8848/tcp

#2,重启防火墙
firewall-cmd --reload 

五,单机模式部署

Nacos支持三种部署模式:

  • 单机模式 - 用于测试和单机试用。
  • 集群模式 - 用于生产环境,确保高可用。
  • 多集群模式 - 用于多数据中心场景。

1,创建父项目

2,创建两个服务

3,引入相关依赖

①父pom文件引入spring-cloud-alibaba-dependencies

 spirngboot、springcloud换个springbootAlibaba等版本需要进行版本对应,具体对应版本可参见如下:

版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHubhttps://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

 ②在两个服务的pom文件中分别加入spring-cloud-starter-alibaba-nacos-discovery

4,配置nacos

在两个服务的application.yml配置文件中

5,启动两个服务

启动报错:

 原因:

所以,服务器防火墙需要放行9848和9849两个端口 

参考官网文档:

Nacos 2.0.0 兼容性文档

此时,这两个服务已经自动注入到nacos服务列表中:

 6,在调用服务端添加负载均衡器注解

7,在调用服务端设置调用路径

8,浏览器访问

 

六、重要概念

1,服务名

服务提供的标识,通过该标识可以唯一确定其指代的服务;在服务间相互调用时,通过服务名代替ip:端口号指定要调用的服务。

2,服务

每个注册到nacos中的服务,提供给客户端的软件功能。

 3,服务分组

不同的服务可以归类到同一分组。根据分组名称指定服务分组。

 4,命名空间

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

nacos默认有一个名叫pulic的空间。

 5,健康检查

以指定方式检查服务下挂载的实例的健康度,从而确定该实力是否能提供服务;根据检查结果,实例 (Instance) 会被判断为健康或不健康。对服务发起解析请求时,不健康的实例 (Instance) 不会返回给客户端。

七、集群模式部署

1,准备三台服务器

192.168.72.129

192.168.72.130

192.168.72.131

2,配置外源数据库

修改canos的配置文件conf/application.properties的外源数据库的配置

注意:不能使用内置数据库,否则三台canos使用的不是同一个数据库

3,配置集群节点

修改canos的配置文件conf/cluster.conf.example名称为cluster.conf

并添加节点配置

 4,创建mysql数据库nacos,并执行脚本confnacos-msyql.sql

5,如果出现内存不足

修改i启动脚本binstartup.sh的jvm参数

我的虚拟机内存只有1g,所以我在此修改: 

6,启动nacos
./startup.sh -cluster

 打印日志启动成功

7,浏览器查看         

八, nginx配置反向代理

1,nginx配置

2,浏览器访问

 3,修改客户端配置 

4,启动失败

com.alibaba.nacos.api.exception.NacosException: Request nacos server failed: 
	at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:279) ~[nacos-client-2.0.3.jar:na]
	at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.doSubscribe(NamingGrpcClientProxy.java:227) ~[nacos-client-2.0.3.jar:na]
	at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.subscribe(NamingGrpcClientProxy.java:212) ~[nacos-client-2.0.3.jar:na]
	at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.subscribe(NamingClientProxyDelegate.java:147) ~[nacos-client-2.0.3.jar:na]
	at com.alibaba.nacos.client.naming.NacosNamingService.subscribe(NacosNamingService.java:393) ~[nacos-client-2.0.3.jar:na]
	at com.alibaba.cloud.nacos.discovery.NacosWatch.start(NacosWatch.java:134) ~[spring-cloud-starter-alibaba-nacos-discovery-2.2.7.RELEASE.jar:2.2.7.RELEASE]
	at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:53) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:360) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:158) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:122) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:895) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:554) [spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) [spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:755) [spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:402) [spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) [spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1247) [spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1236) [spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]
	at com.stock.StockApplication.main(StockApplication.java:11) [classes/:na]
Caused by: com.alibaba.nacos.api.exception.NacosException: Client not connected,current status:STARTING
	at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:655) ~[nacos-client-2.0.3.jar:na]
	at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:635) ~[nacos-client-2.0.3.jar:na]
	at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:269) ~[nacos-client-2.0.3.jar:na]
	... 20 common frames omitted

2022-01-04 11:23:18.991  INFO 10900 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2022-01-04 11:23:19.307 ERROR 10900 --- [           main] c.a.c.n.registry.NacosServiceRegistry    : nacos registry, stock-service register failed...NacosRegistration{nacosDiscoveryProperties=NacosDiscoveryProperties{serverAddr='192.168.72.132:80', endpoint='', namespace='', watchDelay=30000, logName='', service='stock-service', weight=1.0, clusterName='DEFAULT', group='DEFAULT_GROUP', namingLoadCacheAtStart='false', metadata={preserved.register.source=SPRING_CLOUD}, registerEnabled=true, ip='192.168.72.1', networkInterface='', port=8080, secure=false, accessKey='', secretKey='', heartBeatInterval=null, heartBeatTimeout=null, ipDeleteTimeout=null, failFast=true}},

目前还没有找到问题的原因!!!

如有哪位朋友能留言解决方案,我不胜感激!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/696226.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号