Nacos服务注册和管理

声明

    每个人的风格都是不同的,所以我写文章的话喜欢分层次来讲,目的就是达到思路清晰,简单易懂的效果,所以感觉层次和命名古怪的话,就多看几遍文章(坏笑),习惯了就好了。

动机

    针对于Nacos的文章我发觉并不是很多(机会来了),emm开个玩笑,实际上是写给需要的人,毕竟先文章后官方嘛。

Nacos介绍

    Nacos是阿里下的一款服务注册中心实现技术(开源、持续更新),可以帮助我们发现、配置和管理微服务,将入驻的服务管理起来,提供统一的配置,并且Nacos支持和SpringCloud、dobbo、gRPC等联合使用。

Nacos的优点

   服务发现和服务健康监测
     支持基于DNS(域名系统)和基于RPC(远程端口调用)的服务发现,并且还提供了原生SDK、OpenApi等将服务入驻到注册中心,注册中心其他的服务可以通过Http&Api的方式查找和发现服务,对于健康检测,Nacos提供了对服务的实时健康检查,阻止向不健康的主机或服务实例发送请求。
   动态配置服务
     Nacos提供了ui界面图,可以监控/管理/配置服务,同时Nacos还提供了灰度发布、版本跟踪、一键回滚等功能。
   动态 DNS 服务
     动态DNS服务支持权重路由,可以让我们更容易实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。
   服务及其元数据管理
     Nacos能够让我们从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略。

Nacos服务端下载

   Naocs的版本选择以及环境准备
       1.官方推荐是1.3.1版本(稳定版)
          下载地址:Nacos服务端下载地址
       2.至于JDK环境、构建工具、ide工具这种就不啰嗦了

Nacos服务端使用

    话不多说,将下载好的Nacos服务端压缩包进行解压
在这里插入图片描述

    下面是Nacos文件目录的说明在这里插入图片描述
    需要关注点就在于conf目录里面的application.properties文件,该文件里面配置了nacos的端口、nacos依赖数据库地址(默认注释/需要手动设置)等等,该文章只描述服务如何入驻Nacos以及实现服务的统一配置功能,至于数据库的话感兴趣的话可以私下测试(基础概不阔诉)。
在这里插入图片描述
在这里插入图片描述
    切换到bin目录中(我使用的是Nacos默认的配置),对于Nacos服务端的启动可以分为两种方式:简单版1(鼠标点击startup.cmd启动)和简单版2(cmd命令启动),根据自己的想法来选择。
在这里插入图片描述
    启动成功的效果就为该窗口(该窗口不要关闭,否则Nacos服务端就挂掉了,这也是Windows的下部署程序的不好之处(无法设置成开机时启动,导致这个启动窗口要装载着))
在这里插入图片描述
    访问方式:本机地址/ip:端口号(默认为8848)/nacos即可
    例:localhos:8848/nacos ----127.0.0.1:8848/nacos
在这里插入图片描述
Nacos的服务端成功启动并访问了,那么接下来就应该要将服务注册到Nacos中去了,怎么个注册法呢?

Nacos依赖的注意事项

    以下两个情况只是任选一种,不要两者兼顾,否则会出现化学反应哦(坏笑),切记哦,想尝试的伙伴可以试一下哦~
    Nacos提供的SDK依赖的地址(gav坐标)

<dependency>
	<groupId>com.alibaba.nacos</groupId>
	<artifactId>nacos-client</artifactId>
	<version>${version}</version>
</dependency>

    Nacos的服务入驻以及服务读取配置的依赖

<!--config-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>${latest.version}</version>
</dependency>
<!--注册与发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>${latest.version}</version>
</dependency>

实例服务入驻Nacos方式一:SDK

    通过sdk的方式来进行实例服务的入驻,首先添加pom.xml依赖

<dependency>
	<!--推荐为1.3.1-->
	<groupId>com.alibaba.nacos</groupId>
	<artifactId>nacos-client</artifactId>
	<version>1.3.1</version>  
</dependency>

进行编码的方式实现实例服务入驻Nacos中

/**
*  编写一个配置类
*  服务启动时自动入驻Nacos中
*/
@Configuration
public class UtilNaming {
	private static String address = "127.0.0.1:8848"; // nacos的连接诶方式
	/**
	 * NamingService接口中包含服务注册、服务销毁、服务发现方法等
	 * 
	 * 将NamingService对象返回给容器
	 * 可在容器中查找NamingService对象来进行对服务操作(注册、销毁、监听、获取)等
	 * @return
	 */
	@Bean
	public NamingService namingservice() {
		NamingService naming;
		try {
			naming = NamingFactory.createNamingService(address); // 连接到本地nacos中去
			//参数一:服务实例名称
			//参数二:服务实例ip
			//参数三:服务实例端口
			naming.registerInstance("appname", "127.0.0.1", 9999);
		} catch (NacosException e) {
			// 触发异常:实例无法入驻、参数类型无法匹配等等
			return null;
		}
		return naming;
	}
}

额外的补充
     emm,有些话多了,但是目的是想让你们清楚方法的来源以及方法的作用,坚持坚持看一下或了解一下吧。
NamingService接口的方法讲解以及参数讲解
在这里插入图片描述
在这里插入图片描述

    /**
     * register a instance to service with specified cluster name
     *
     * @param serviceName 实例服务名称
     * @param groupName   实例服务分组
     * @param ip          实例服务ip
     * @param port        实例服务端口
     * @param clusterName 实例方法集群名称
     * @throws NacosException
     */
    void registerInstance(String serviceName, String groupName, String ip, int port, String clusterName) throws NacosException;

    /**
     * register a instance to service with specified instance properties
     *
     * @param serviceName  实例服务名称
     * @param instance   阿里提供的vo/po类,里面封装了服务实例ip、服务实例集群名称、服务实例分组名称等系列属性
     * @throws NacosException
     */
    void registerInstance(String serviceName, Instance instance) throws NacosException;

NamingService接口的实现类NacosNamingService类的方法讲解以及参数讲解
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

好,回到正题,在编写好配置类之后,就剩下服务的启动类了,启动类话较简单,直接启动即可。
在这里插入图片描述

好了万事俱备只欠启动了,将服务启动好之后访问Nacos服务端即可
在这里插入图片描述

实例服务入驻Nacos方式二:配置文件

    通过配置文件的方式来进行实例服务的入驻,首先添加pom.xml依赖

<!-- nacos服务发现 -->
	<dependency>
		<groupId>com.alibaba.cloud</groupId>
		<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
		<version>2.0.1.RELEASE</version>
	</dependency>

在这里插入图片描述
依赖添加好之后,进行配置文件的配置(我使用的是yaml格式(缩写yml)的配置文件和properties类似,只不过优先级和格式不同)。

#端口
server:
  port: 9999
  
spring:
#服务实例名称
  application:
    name: nacosinstancedemo
  cloud:
    nacos:
      discovery:
#nacos的连接地址 --默认值为${spring.cloud.nacos.server-addr}
        server-addr: 127.0.0.1:8848

额外的补充
     emm,还是那句话,想让你们清楚(为什么配置文件中配置一个nacos的连接地址即可),坚持坚持
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
好,回到正题,在配置好之后,在启动类中添加@EnableDiscoveryClient注解即可。
在这里插入图片描述
额外的补充
     emm,坚持坚持坚持(无奈无奈)
在这里插入图片描述在这里插入图片描述
好,回到正题,服务启动好之后访问Nacos服务端即可发现服务实例已经入驻成功了。
在这里插入图片描述

Nacos服务端配置统一的配置文件方式一:SDK

    老样子,首先添加pom.xml依赖

<dependency>
	<!--推荐为1.3.1-->
	<groupId>com.alibaba.nacos</groupId>
	<artifactId>nacos-client</artifactId>
	<version>1.3.1</version>  
</dependency>

进行编码的方式发布配置并读取配置信息

/**
*  编写一个配置类
*  服务启动自动发布配置和读取配置并进行输出
*/
@Configuration
public class UtilConfigService {

	@Bean
	public ConfigService configservice() {
		ConfigService config = null;
		try {
			String serverAddr = "127.0.0.1:8848"; // nacos地址
			String dataId = "csdndemo"; // dataid
			String group = "csdndemo"; // 分组
			Properties properties = new Properties();
			properties.put("serverAddr", serverAddr);
			config = NacosFactory.createConfigService(properties); // 连接nacos通过Nacos工厂对象
			/**
			 * 发布配置 参数一:dataid 参数二:分组名称 参数三:发布内容(官方规定不超过100k字节)
			 */
			boolean publishConfig = config.publishConfig(dataId, group, "server.port=8081");
			System.out.println(publishConfig); //返回值在服务启动时候就输出了,我没有进行截图 
			/**
			 * 读取配置 参数一:dataid 参数二:分组名称 参数三:超时时间
			 */
			String content = config.getConfig(dataId, group, 5000);
			System.out.println(content); //返回读取的内容服务启动时候输出,我没有截图
		} catch (NacosException e) {
			e.printStackTrace();
			return null;
		}
		return config;
	}
}

哈哈这次不再补充了,担心会感觉枯燥(感兴趣的话可以自己去看底层(发布配置、获取配置、监听配置、删除配置的方法都在com.alibaba.nacos.api.config.ConfigService接口中)),好了言归正传,当程序启动成功之后,可以查看Nacos服务端的配置列表中会出现我们刚才所配置的配置信息
在这里插入图片描述
需要注意的一点: 1.通过sdk的方式发布配置有个小弊端(需要到Nacos服务端的配置列表中的指定的配置中设置它的配置文件格式) 2.服务实例读取Nacos配置的时候需要使用bootstrap开头的配置文件(例如:bootstrap.yaml或bootstrap.propeties或bootstrap.yml)切记,如果不是bootstrp开头的配置文件则无法读取,会提示访问不到指定的配置服务 3.什么格式的配置文件就读取什么格式的配置(例如:properties格式的配置文件就读取properties的,yaml/yml格式的配置文件就读取yaml/yml的),千万别弄混,不然即使可以读取成功,但也无法生效
在这里插入图片描述
在这里插入图片描述

我设置的配置文件的格式是properties,然后在pom.xml中添加nacos-config的依赖以及创建bootstrap.properties配置文件并进行配置读取Nacos服务端配置的参数信息

pro.xml

<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
	<!--版本的话根据自己的项目版本来选择(参照mavenreposiotry中的版本)-->
	<version>2.0.1.RELEASE</version>
</dependency>

bootstrap.properties

#nacos的连接地址 --默认值为${spring.cloud.nacos.server-addr}
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#配置文件的格式 ---设置成跟读取的某个配置文件的格式相同的格式
spring.cloud.nacos.config.file-extension=properties
#配置列表的dataid
spring.cloud.nacos.config.prefix=csdndemo
#配置列表的group --默认为DEFAULT_GROUP
spring.cloud.nacos.config.group=csdndemo

配置好之后就可以启动项目,启动项目的时候查看控制台的输出语句,就可以确定配置文件是否生效,这里的话已经生效了,日志信息我已经截图放在了下面。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Nacos服务端配置统一的配置文件方式二:服务端UI界面

使用这个方式的话会方便一些,直接在Nacos服务端进行设置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上就是在Nacos服务端创建配置文件的方式,至于读取方式,可参照方式一中的读取方式

结尾

    这篇文章的内容总体讲的话内容也挺多的,感觉有些地方话多了(尴尬笑),望见谅,配置的方式以及步骤是我自己的实践和结合官方的说明编写的,放心绝对是真材实料的,好了好了,这里就是结尾了,如果有什么好的建议的话,欢迎评论到下方,我会及时查看的,另外如果觉得该文章好的话可以转发+点赞哦~~

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值