当前位置: 首页 > news >正文

SpringCloud Alibaba Nacos 注册中心/配置中心

 Nacos

一 Nacos的安装

网址:Nacos Server 下载 | Nacos 官网

1 我下的版本为2.5.1

错误根源分析:
在堆栈跟踪的最底部,你可以看到根本原因:
Caused by: java.net.UnknownHostException: jmenv.tbsite.net

Nacos 的设计中,在集群模式下(即使你指定了 -m standalone,某些配置可能仍会触发集群查找逻辑),会尝试通过访问一个地址服务器(Address Server)来获取集群节点列表。这个地址服务器的域名默认就是 jmenv.tbsite.net(这是阿里云内部的一个域名)。在你的本地开发环境中,这个域名是无法解析的,因此抛出了 UnknownHostException

同时也需要在管理员的身份运行

解决方案

方式 1:修改 Nacos 配置文件,避免使用 jmenv.tbsite.net

  1. 打开 D:\JAVA\nacos\conf\application.propertiesnacos/conf/application.properties

  2. 找到 nacos.core.member.lookup.type 相关配置,设置为 static,让 Nacos 直接使用静态 IP 列表,而不是去连外网。

加两行参数

nacos.core.member.lookup.type=static
nacos.core.member.lookup=127.0.0.1:8848

在bin目录下开启 使用命令:

.\startup.cmd -m standalone

二 服务注册

依赖

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

创建相关的项目配置文件

spring.application.name=service-order
server.port=8080spring.cloud.nacos.server-addr=127.0.0.1:8848

开启项目访问地址:

显示服务则成功

另一个server-product也是一样

最终效果:

1 模拟多个

参数

展示:

2 服务发现与负载均衡的实现

1 如果是第一次调用,注册中心宕机,则不能调用成功。

2 如果已经调用过,注册中心宕机,则可以调用成功。-相当于是一个缓存机制

@Slf4j
@Service
public class OrderServiceImpl implements OrderService {@Autowiredprivate DiscoveryClient discoveryClient;@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate LoadBalancerClient loadBalancerClient;@Overridepublic Order createOrder(Long productId, Long userId) {Product product = getProductFromRemote3(productId);Order order = new Order();order.setId(1L);// 远程调用计算商品数额order.setTotalAmount(product.getPrice().multiply(new BigDecimal(product.getNum())));order.setUserId(userId);order.setNickName("张三");order.setAddress("青岛");// 远程调用获取商品信息order.setProductList(Arrays.asList(product));return order;}// 1 从商品服务中获取商品信息(默认第一个)private Product getProductFromRemote(Long productId) {//1 获取到商品服务所在的所有机器IP+端口List<ServiceInstance> instances = discoveryClient.getInstances("service-product");ServiceInstance instance = instances.get(0);//2 机器的IP+端口String url = "http://" + instance.getHost() + ":" + instance.getPort() + "/product/" + productId;log.info("url:{}", url);//3 通过RestTemplate远程调用Product product = restTemplate.getForObject(url, Product.class);return product;}// 2 从商品服务中获取商品信息(依赖注入的方式 负载均衡)private Product getProductFromRemote2(Long productId) {ServiceInstance instance = loadBalancerClient.choose("service-product");String url = "http://" + instance.getHost() + ":" + instance.getPort() + "/product/" + productId;log.info("url:{}", url);return restTemplate.getForObject(url, Product.class);}// 3 从商品服务中获取商品信息(基于注解的方式 负载均衡)private Product getProductFromRemote3(Long productId) {// 基于注解的方式,service-product会被动态替换为对应的ip地址与端口return restTemplate.getForObject("http://service-product/product/" + productId, Product.class);}

三 配置中心

依赖导入:

        <!-- 配置中心 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>

编写配置:

创建对应的数据集:

spring.application.name=service-order
server.port=8080spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.config.import=nacos:service-order.properties
spring.cloud.nacos.config.import-check.enabled=false

动态刷新

新建名称空间:

总结:

server:port: 8080
spring:application:name: service-orderprofiles:active: prodcloud:nacos:server-addr: 127.0.0.1:8848config:import-check:enabled: falsenamespace: ${spring.profiles.active:dev}---
spring:config:import:- nacos:common.properties?group=order- nacos:database.properties?group=orderactivate:on-profile: dev---
spring:config:import:- nacos:common.properties?group=order- nacos:database.properties?group=order- nacos:haha.properties?group=orderactivate:on-profile: test---
spring:config:import:- nacos:common.properties?group=order- nacos:database.properties?group=order- nacos:haha.properties?group=orderactivate:on-profile: prod

http://www.dtcms.com/a/356050.html

相关文章:

  • SpringBoot 配置文件在运维开发中的应用
  • 基于springboot的商业店铺租赁系统
  • 在 Vue 前端(Vue2/Vue3 通用)载入 JSON 格式的动图
  • 校园文化活动管理系统设计与实现(代码+数据库+LW)
  • web前端知识——第一阶段
  • 【buildroot】【1. Buildroot版本与Linux内核调试对应关系】
  • 基于SpringBoot的旅游景点推荐系统【2026最新】
  • 域名所有权变更,需要重新备案吗
  • Day16_【机器学习分类】
  • 软磁材料与硬磁材料
  • MTK Linux DRM分析(十九)- KMS drm_framebuffer.c
  • LeetCode 141.环形链表
  • 软考中级【网络工程师】第6版教材 第4章 无线通信网 (上)
  • 8.28 JS移动端事件
  • HTTP 范围请求:为什么你的下载可以“断点续传”?
  • 现在购买PCIe 5.0 SSD是否是最好的时机?
  • 嵌入式学习笔记--LINUX系统编程阶段--DAY02系统编程
  • 嵌入式学习日志————实验:串口发送串口发送+接收
  • 亚远景-ISO/PAS 8800:如何通过认证提升企业技术管理能力?
  • 入职体检空腹血糖 6.15mmol/L合格吗?
  • amis上传组件导入文件接口参数为base64格式的使用示例
  • NumPy 2.x 完全指南【三十一】布尔数组索引
  • ConcurrentHashMap的原理
  • 实战笔记——构建智能Agent:SpreadJS代码助手
  • vue3使用reactive和ref
  • 【python】python进阶——生成器
  • JDK的ConcurrentHashMap为什么放弃了分段锁
  • 大模型开发之:LangChain4j【附资料】
  • C++基础知识:虚函数和纯虚函数
  • 基于MATLAB的FIR滤波器设计与信号分离实现