Spring Cloud Alibaba 整合 Nacos

news2024/12/27 13:58:27

写在最前

项目 GitHub 地址 mingyue-springcloud-learning 【mingyue-springcloud-user、mingyue-springcloud-member】

阅读推荐

  • Spring Cloud 入门必读
  • Spring Cloud Alibaba 入门必读

版本声明

spring-boot: 2.7.5
spring-cloud: 2021.0.5
spring-cloud-alibaba: 2021.0.4.0

nacos: 2.1.2

Nacos 简介

Nacos 是一个 Alibaba 开源的、易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

  • Spring Cloud Alibaba Nacos Discovery,可基于 Spring Cloud 的编程模型快速接入 Nacos 服务注册功能。

  • Spring Cloud Alibaba Nacos Config,可基于 Spring Cloud 的编程模型快速接入 Nacos 配置管理功能。

Nacos 下载

Nacos 的获取和启动方式可以参考 Nacos 官网。

本文使用 Nacos 2.1.1

版本选择

1.通过 pom.xml 文件依赖项,spring cloud alibaba 坐标 artifactId,进入 spring cloud alibaba 的 pom.xml 文件

 <!-- spring cloud alibaba 依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>${spring-cloud-alibaba.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

2.查看 nacos.client.version,最低推荐 2.0.4 版本。截至目前推荐的稳定版本为 2.1.1

<properties>
    <maven-javadoc-plugin.version>3.1.1</maven-javadoc-plugin.version>
    <sentinel.version>1.8.5</sentinel.version>
    <maven-gpg-plugin.version>3.0.1</maven-gpg-plugin.version>
    <maven-source-plugin.version>3.2.1</maven-source-plugin.version>
    <flatten-maven-plugin.version>1.2.7</flatten-maven-plugin.version>
    <revision>2021.0.4.0</revision>
    <nacos.client.version>2.0.4</nacos.client.version>
    <seata.version>1.5.2</seata.version>
    <spring.context.support.version>1.0.11</spring.context.support.version>
</properties>

Window 安装启动

解压 nacos-server-2.1.1.zip,进入 nacos-server-2.1.1\nacos\bin 目录

# bin 目录打开 cmd  直接双击打开是集群模式
startup.cmd -m standalone

启动成功后访问:http://127.0.0.1:8848/nacos/#/login

用户名密码
nacosnacos

image-20221118162757894

Docker 安装

推荐使用 Docker 安装

  • Docker
  • Docker-Compose
  • 官方推荐的 Docker 安装方式:Nacos Docker 快速开始

本项目提供了 docker-compose 基础环境安装

进入 docker 目录,执行 docker-compose up -d,启动成功后访问:http://127.0.0.1:8848/nacos/#/login

docker
└──	mysql
	└──	db
		└── nacos-mysql.sql
	└── dockerfile
└──	nacos
	└──	conf
		└── application.properties
	└── dockerfile
└──	docker-compose.yml

服务注册/发现: Nacos Discovery

服务发现是微服务架构体系中最关键的组件之一。如果尝试着用手动的方式来给每一个客户端来配置所有服务提供者的服务列表是一件非常困难的事,而且也不利于 服务的动态扩缩容。Nacos Discovery 可以帮助您将服务自动注册到 Nacos 服务端并且能够动态感知和刷新某个服务实例的服务列表。除此之外,Nacos Discovery 也将服务实例自身的一些元数据信息-例如 host,port, 健康检查URL,主页等内容注册到 Nacos。

添加 pom 文件依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

bootstrap.yml 添加配置

spring:
  cloud:
    nacos:
      discovery:
        server-addr: ip:port

开启服务注册发现功能

@EnableDiscoveryClient
@SpringBootApplication
public class MingYueUserApplication {

	public static void main(String[] args) {
		SpringApplication.run(MingYueUserApplication.class, args);
	}

}

启动服务

这个时候你就可以在 Nacos 的控制台上看到注册上来的服务信息了。

image-20221122141814774

调用 Nacos 注册的服务

Nacos Discovery 适配了 Netflix Ribbon,可以使用 RestTemplate 或 OpenFeign 进行服务的调用。

Consumer 应用可能还没像启动一个 Provider 应用那么简单。因为在 Consumer 端需要去调用 Provider 端提供的 REST 服务。例子中我们使用最原始的一种方式,即显示的使用 LoadBalanceClient 和 RestTemplate 结合的方式来访问。

编写 Consumer

import lombok.RequiredArgsConstructor;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * 用户接口
 *
 * @author Strive
 */
@RestController
@RequestMapping("/memberNacos")
@RequiredArgsConstructor
public class MemberNacosController {

	private final LoadBalancerClient loadBalancerClient;

	@GetMapping("/userInfo")
	public String getUserNacos() {
		// 使用 LoadBalanceClient 和 RestTemplate 结合的方式来访问
		ServiceInstance serviceInstance = loadBalancerClient.choose("mingyue-springcloud-user");
		String url = String.format("http://%s:%s/userNacos/info", serviceInstance.getHost(), serviceInstance.getPort());
		System.out.println("request url:" + url);

		RestTemplate restTemplate = new RestTemplate();

		return restTemplate.getForObject(url, String.class);
	}

}

引入 loadbalancer

<!-- SpringCloud Loadbalancer -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

启动服务,测试接口

curl --location --request GET 'http://127.0.0.1:8100/memberNacos/userInfo' \
--header 'User-Agent: apifox/1.0.0 (https://www.apifox.cn)' \
--header 'Accept: */*' \
--header 'Host: 127.0.0.1:8100' \
--header 'Connection: keep-alive'

返回数据:

{
    "userNick": "none",
    "username": "none"
}

配置管理: Nacos Config

Nacos 是一个 Alibaba 开源的、易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

使用 Spring Cloud Alibaba Nacos Config,可基于 Spring Cloud 的编程模型快速接入 Nacos 配置管理功能。

添加 pom 文件依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

bootstrap.yml 添加配置

在运行此 NacosConfigApplication 之前, 必须使用 bootstrap.yml 配置文件来配置 Nacos Server 地址。

spring:
  profiles:
    active: @profiles.active@
  application:
    name: @artifactId@
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8848
        # 配置文件格式
        file-extension: yaml
        # 共享配置
        shared-configs:
          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

Naocs 添加配置

DataId 默认使用 spring.application.name 配置跟文件扩展名结合(配置格式默认使用 properties), GROUP 不配置默认使用 DEFAULT_GROUP。因此该配置文件对应的 Nacos Config 配置的 DataId 为 mingyue-springcloud-user-mingyue.yaml, GROUP 为 DEFAULT_GROUP。

如果需要切换环境,只需要更改 ${spring.profiles.active} 参数配置即可!

此案例中我们通过 spring.profiles.active=<profilename> 的方式写死在配置文件中,而在真正的项目实施过程中这个变量的值是需要不同环境而有不同的值。这个时候通常的做法是通过 -Dspring.profiles.active=<profile> 参数指定其配置来达到环境间灵活的切换。

image-20221123140941289

录入以下配置,点击 发布 生效。

server:
  port: 8200

user:
  username: Strive
  userNick: 小小程

添加测试接口

/**
 * 用户接口
 *
 * @author Strive
 */
@RefreshScope
@RestController
@RequestMapping("/userNacos")
public class UserNacosController {

	@Value("${user.username:none}")
	private String username;

	@Value("${user.userNick:none}")
	private String userNick;

	@GetMapping("/info")
	public Map<String, String> info() {
		HashMap<String, String> userInfo = MapUtil.newHashMap();

		userInfo.put("username", username);
		userInfo.put("userNick", userNick);

		return userInfo;
	}

}

启动项目,访问接口

curl --location --request GET 'http://127.0.0.1:8200/userNacos/info' \
--header 'User-Agent: apifox/1.0.0 (https://www.apifox.cn)' \
--header 'Accept: */*' \
--header 'Host: 127.0.0.1:8200' \
--header 'Connection: keep-alive'

返回数据

{"userNick":"小小程","username":"Strive"}

动态配置

Nacos Config 默认支持配置的动态更新,可以通过配置 spring.cloud.nacos.config.refresh.enabled=false 来关闭动态刷新

image-20221123142230984

编辑完,点击 发布 生效,再次访问接口查看是否生效!

user:
  username: MingYue
  userNick: 小小猪

后台会有日志打印:

...
o.s.boot.SpringApplication               : The following 1 profile is active: "mingyue"
o.s.boot.SpringApplication               : Started application in 0.297 seconds (JVM running for 160.784)
o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [user.userNick, user.username]

Tips

Nacos 主要的功能介绍完了,当然 Nacos 功能远不止这些,授人以鱼不如授人以渔

  • 中文文档 第三章 Nacos
  • [官方文档 第三章 Nacos](Spring Cloud Alibaba Reference Documentation (spring-cloud-alibaba-group.github.io))
3. Spring Cloud Alibaba Nacos Discovery
    3.1. 服务注册/发现: Nacos Discovery
    3.2. 如何引入 Nacos Discovery 进行服务注册/发现
    3.3. 一个使用 Nacos Discovery 进行服务注册/发现并调用的例子
    3.3.1. Nacos Server 启动
    3.3.2. Provider 应用
    3.3.3. Consumer 应用
    3.4. Nacos Discovery 对外暴露的 Endpoint
    3.5. 如何开启权重路由
    3.5.1. Ribbon
    3.6. 关于 Nacos Discovery Starter 更多的配置项信息
4. Spring Cloud Alibaba Nacos Config
    4.1. 如何引入 Nacos Config 进行配置管理
    4.2. 快速开始
    4.2.1. Nacos 服务端初始化
    4.2.2. 客户端使用方式
    4.3. 基于 DataId 为 yaml 的文件扩展名配置方式
    4.4. 支持配置的动态更新
    4.5. 支持profile粒度的配置
    4.6. 支持自定义 namespace 的配置
    4.7. 支持自定义 Group 的配置
    4.8. 支持自定义扩展的 Data Id 配置
    4.9. 配置的优先级
    4.10. Nacos Config 对外暴露的 Endpoint
    4.11. 完全关闭 Nacos Config 的自动化配置
    4.12. 关于 Nacos Config Starter 更多的配置项信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32032.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文阅读 Fast Reinforcement Learning Via Slow Reinforcement Learning

论文阅读 RL^2 Fast Reinforcement Learning Via Slow Reinforcement Learning1. 摘要2.introduction3. 实现4.小结1. 摘要 强化学习可以对于单个任务有较好的效果&#xff0c;但需要大量的尝试。动物往往可以通过少量的尝试就获得很好的效果。原因在于动物可以更好地使用先验…

学习笔记——Java Stream 源码学习

思路 先上一段代码 List<User> userList new ArrayList<>();for (int i 0; i < 10; i) {userList.add(new User(i, "wtq", "1234"));}userList.stream().filter(user -> user.getUserId() > 3).filter(user -> user.getUserId(…

【JVM】字节码技术:图解字节码形式下的 方法执行流程

一、源文件 package cn.itcast.jvm.t3.bytecode;/** * 演示 字节码指令 和 操作数栈、常量池的关系 */ public class Demo3_1 {public static void main(String[] args) {int a 10;int b Short.MAX_VALUE 1;int c a b;System.out.println(c);} }二、反编译的字节码文件 …

《Go语言精进之路,从新手到高手的编程思想、方法和技巧1》读书笔记和分享

Go语言精进之路&#xff0c;从新手到高手的编程思想、方法和技巧读书分享1 本书定位2 本书内容总览3 选择本书的原因4 小收获分享第7-12条 真的不知道咋命名第13-19条 能用——怎么用更好5 个人总结第一部分 熟知 Go 语言的一切第 1 条 了解 Go 语言的诞生与演进第 2 条 选择适…

甘露糖-聚乙二醇-CY5.5 /Cy5.5-PEG-mannose

甘露糖-聚乙二醇-CY5.5 /Cy5.5-PEG-mannose 中文名称&#xff1a;甘露糖-近红外染料CY5.5 英文名称&#xff1a;mannose-Cyanine5.5 别称&#xff1a;CY5.5修饰甘露糖&#xff0c;CY5.5-甘露糖 PEG分子量可选&#xff1a;350、550、750、1k、2k、34k、5k 包装&#xff1a;…

es(网站的搜索技术)

一。搜索技术 springboot集成es ElasticsearchRestTemplate mapping 继承 extends ElasticsearchRepository 实体类写的映射关系&#xff1a; 注解&#xff1a;Document用来声明Java对象与ElasticSearch索引的关系 indexName 索引名称(是字母的话必须是小…

线性回归的神经网络法——机器学习

一、算法思想 线性回归方程在神经网络深度学习中线性回归方程是需要掌握的最基础的式子&#xff0c;就是&#xff1a;ywxb,其中w,b是未知的。 神经网络就是可以通过收集大量的数据集&#xff0c;然后将这些数据集进行训练后得到几个较为准确的参数&#xff0c;训练数据集后会得…

MongoDB单机集群方案及详解

目录帮助文档MongoDB在企业级网站中的定位单机MongoDB部署集群&#xff08;副本集&#xff09;集群&#xff08;副本集仲裁&#xff09;集群&#xff08;分片&#xff09;mongo运行原理mongo管理小工具推荐帮助文档 MongoDB官方更新速度过快&#xff0c;语法不断更新&#xff…

云南民族文化旅游网页设计制作 简单静态HTML网页作品 我的家乡网页作业成品 学生旅游网站模板

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

m基于光纤光栅传感网接入GPON的光纤通信系统matlab性能仿真,包括解码,解封装,分接,码率恢复,解帧,拆包,译码

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 接入处理系统模块化设计&#xff1a; 传感器接收到的信息转换为二进制信息&#xff08;这个我们可以直接模拟出随机的二进制序列来表示传感器的数据&#xff0c;首先设置一组数据&#…

maven学习: 使用Maven构建Web项目

5.1 Maven中Web项目的结构 ​ 在java的世界中&#xff0c;Web应用占有很大的地位&#xff0c;而它的标准打包方式是WAR。WAR与JAR类似&#xff0c;但它包含了更多内容&#xff0c;如JSP文件、Servlet、web.xml配置文件、静态web资源&#xff08;如html&#xff0c;css&#xf…

Python Gui之tkinter

GUI是什么 目录 1。GUI编程的核心步骤和第一个GUI程序 2.tkinter主窗口​​​​​​​ 3.GUI的整体描述 常用组件汇总 4.简单的组件 1.Label标签 2.Options选项详解 3.Button 4.Entry单行文本框 5.Text多行文本框 1。GUI编程的核心步骤和第一个GUI程序 from tkinte…

biaffine model:Named Entity Recognition as Dependency Parsing

论文名称&#xff1a;Named Entity Recognition as Dependency Parsing 论文地址&#xff1a;https://www.aclweb.org/anthology/2020.acl-main.577/ 前提说明 本文主要参考了以下资料 nlp_paper_study_information_extraction/code_pytorch.md at main km1994/nlp_paper_s…

ASEMI肖特基二极管SBT40100VFCT规格,SBT40100VFCT封装

编辑-Z ASEMI肖特基二极管SBT40100VFCT参数&#xff1a; 型号&#xff1a;SBT40100VFCT 最大重复峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;100V 最大平均正向整流输出电流&#xff08;IF&#xff09;&#xff1a;40A 峰值正向浪涌电流&#xff08;IFSM&#…

使用kubeadm搭建高可用集群-k8s相关组件及1.16版本的安装部署

本文是向大家分享k8s相关组件及1.16版本的安装部署&#xff0c;它能够让大家初步了解k8s核心组件的原理及k8s的相关优势&#xff0c;有兴趣的同学可以部署安装下。 什么是kubernetes kubernetes是Google 开源的容器集群管理系统&#xff0c;是大规模容器应用编排系统&#xff…

ubuntu下jupyter notebook设置远程访问

1. 安装anaconda 推荐安装anaconda&#xff0c;安装后就会包含jupyter notebook 使用命令conda list或者pip list查看jupyter notebook包&#xff0c;这里不多介绍 2. 生成默认配置文件 在ubuntu环境下&#xff0c;安装jupyter notebook后&#xff0c;用户主目录中会有一个…

DRU-Net--一种用于医学图像分割的高效深度卷积神经网络

Title:DRU-NET: AN EFFICIENT DEEP CONVOLUTIONAL NEURAL NETWORK FOR MEDICAL IMAGE SEGMENTATION 摘要 本文的网络结构是受ResNet和DenseNet两个网络的启发而提出的。与ResNet相比本文的方法增加了额外的跳跃连接&#xff0c;但使用的模型参数要比DenseNet少的多。 基于先…

【创建型设计模式-单例模式】一文搞懂单例模式的使用场景及代码实现的7种方式(全)

1.什么是单例模式 在了解单例模式前&#xff0c;我们先来看一下它的定义&#xff1a; 确保一个类只有一个实例&#xff0c;而且自行实例化并且自行向整个系统提供这个实例&#xff0c;这个类称为单例类&#xff0c;它提供全局访问的方法&#xff0c; 单例模式是一种对象的创建型…

北京东物流,南顺丰速运

配图来自Canva可画 众所周知&#xff0c;“双11”是一年一度的物流高峰期&#xff0c;但2022年“双11”当日快递业务量并未达到预期水平&#xff0c;全年增速创下新低。据了解&#xff0c;“双11”当日业务量为5.52亿件&#xff0c;同比下滑了20.69%&#xff0c;而11月1日至11…

什么是CISAW认证?有什么价值?

随着信息技术的快速发展和信息化应用的不断深入&#xff0c;信息技术、产品及网络已经融入社会经济生活的方方面面&#xff0c;但同时信息安全问题也越来越突出。面对严峻的信息安全形势&#xff0c;我国将信息安全上升至国家战略&#xff0c;相继出台了一系列政策法规。那大家…