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

Spring-cloud 主键Nacos

一,下载nacos

Nacos(dynamic Naming and Configuration Service) 

Nacos的安装

(1) Windows安装

默认是集群模式,我们要修改为单机模式

将集群模式变成单机模式bin/startup.cmd 右键在记事本上打开,修改配置保存

127.0.0.1:8848/nacos出现以下页面,说明启动成功

常见的问题:

①集群环境跟改为单机环境

②端口号被占用

netstat -ano|findstr 8848;--->>>找到进程id
taskkill /pid [进程id] -f ;->>>杀死进程

或者更改nacos的端口号配置。路径:conf/application.properties

(2) linux环境安装

①下载安装包

②解压安装包 apt-get install unzip

③启动 bash startup.sh -m standalone

④开放端口号

⑤启动测试http://[公网ip]:8848/nacos

二, Nacos使用

①引入Spring-cloud-alibaba

②引入Nacos依赖

③修改配置

④远程调用

⑤测试

在父工程的pom文件中的 <dependencyManagement>引入依赖

 <properties><spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version></properties><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>

在order-service和product-service中引⼊nacos依赖

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

修改配置

spring:application:name: order-servicecloud:nacos:discovery:server-addr: 39.102.210.73:8848

修改代码,修改为远程调用和负载均衡

package com.ABdolphin.order.service;@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public OrderInfo selectOrderById(Integer orderId){OrderInfo orderInfo = orderMapper.selectOrderById(orderId);String url="http://product-service/product/"+orderInfo.getProductId();ProduceInfo produceInfo = restTemplate.getForObject(url, ProduceInfo.class);orderInfo.setProduceInfo(produceInfo);return orderInfo;}
}
package com.ABdolphin.order.config;@Configuration
public class BeanConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
}

版本对应:版本发布说明-阿里云Spring Cloud Alibaba官网https://sca.aliyun.com/docs/2022/overview/version-explain/

三, 服务下线

四, 权重的配置

通过修改这里的配置发现没有作用:

Nacos服务实例权重不影响流量分配的原因-微服务引擎-阿里云https://help.aliyun.com/zh/mse/support/what-do-i-do-if-the-modified-weight-of-an-application-instance-does-not-take-effect-on-an-mse-nacos-instance

使用的应用框架有自身的负载均衡配置方式,不使用Nacos的权重属性进行负载均衡。这时就需要修改配置,增加nacos负载均衡策略

spring.nacos.loadbalancer.nacos.enabled = true

配置到order-Service里面,然后重启该项目,重新发送请求,可以发现结果符合请求

如果出现了以下错误:

报错信息:caused:errCode:500,errMsg:dometadataoperationfailed;caused: com.alibaba.nacos.consistency.exception.ConsistencyException: The Raft Group [naming_instance_metadata] did not find the Leader node;caused: The Raft Group [naming_instance_metadata] did not find the Leader node;

这是因为nacos会记录上一次集群或单机的ip地址,如果ip地址发生了改变,nacos就会报以上错误,解决方案删除nacos文件夹中data文件里面的protocol,即可解决

五, 同集群优先访问

在一定程度上也可以理解为同机房优先访问

如果不修改默认为默认集群,修改集群的方式为以下配置:
spring.cloud.nacos.discovery.cluster-name=[名称]

进行测试:

将product-Service分为不同的集群,分别为SH集群和BJ集群

将order-Service分为BJ集群

现在进行访问:可以看到只有集群BJ的实例收到了访问请求(和order-Service集群相同的实例)

这时如果将BJ的product-Service实例下线:这时就会将请求发送给其他集群的实例

六, nacos健康监测

客户端主动上报机制:

客户端通过心跳上报方式告知服务端(nacos注册中心)健康状态,默认心跳间隔5秒;

nacos会在超过15秒未收到心跳后将实例设置为不健康状态,超过30秒将实例删除

服务器反向探测机制

nacos主动探知客户端健康状态,默认间隔为20秒

健康检查失败后实例会被标记为不健康,不会被立即删除

客户端主动上报机制:针对是临时实例,而服务器反向探测机制针对的是非临时实例

Nacos服务实例类型不允许改变,如果为临时实例,不能修改为非临时实例。如果想要修改可以删除nacos/data/protocol/raft文件进行修改

① 停止nacos

②删除数据信息,即nacos/data/protocol/raft

③重启nacos

修改配置:spring.cloud.nacos.discovery.ephemeral=false

如果将order-Service线程关闭,如果下图所示,状态标记为false,但是不会立刻进行删除

七, 环境隔离

① 开发环境
② 测试环境
③ 预发布环境
④ 发布环境

开发环境的服务只能访问开发环境的。

通过更改配置,修改环境:spring.cloud.nacos.discovery.namespace=【命名空间的ID】

将order-Service修改为dev环境,但是其他的product-Service还是在public(默认环境)下的,所以就会报出来找不到product-Service错误

将product-Service修改为dev环境.就可以访问到了

八, nacos配置中心

给不同的环境进行不同的配置. 当前的代码都在代码中,如果要修改配置,还需要重新打包上线,这是一个机械化重复的步骤,这时就需要借助配置中心了

服务管理的命名空间,并不等于配置中心的命名空间

① 添加配置

② 引入相关依赖

③ 修改配置文件

(1)添加配置

1. DataID设置为项目名称
2. 配置内容的数据格式,目前只支持properties和yaml
3. 设置配置内容

(2) 添加依赖

         <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- SpringCloud 2020.*之后版本需要引⼊bootstrap--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>

(3) 修改配置文件

创建一个新的配置文件bootstrap.yml(Nacos要求 必须使用bootstrap.properties配置文件来配置NacosServer地址。先扫描bootstrap.yml配置文件再扫描application,yml配置文件,然后将两个配置文件进行整合)

spring.application.name=product-service【与DataID名称保持一致】

spring.cloud.nacos.config.server-addr=39.102.210.73:8848

spring:application:name: product-servicecloud:nacos:config:server-addr: 39.102.210.73:8848

(4) 测试

由于nacos配置文件中并没有设置命名空间,所以这里访问的默认是public下面的(但命名空间里面配置的是dev,但是这里访问的是public,由此再次证实 “服务管理的命名空间,并不等于配置中心的命名空间”)

@RefreshScope
@RestController
public class NacosController {@Value("${nacos.config}")private String config;@RequestMapping("/getConfig")public String getConfig(){return "从nacos获取配置项nacos.config:"+config;}
}

加上@RefleshScore注解,配置热更新。就可以对配置nacos配置中心里面的配置实时更新

设置命名空间:spring.cloud.nacos.config.namespace=【命名空间ID】

九. 配置中心详解

Data ID;

Nacos 融合 Spring Cloud,成为注册配置中心 | Nacos 官网https://nacos.io/docs/v2/ecology/use-nacos-with-spring-cloud/?spm=5238cd80.2ef5001f.0.0.3f613b7ceWVn9x

微服务启动时,会从Nacos读取多个配置⽂件:

${prefix}-${spring.profiles.active}.${file-extension}

${prefix}.${file-extension}

${prefix}

判断一下这三个配置文件的优先级:

由此可见${prefix}-${spring.profiles.active}.${file-extension}优先级最高,${prefix}.${file-extension}次之.${prefix}最低

十, nacos服务部署

修改本地的配置:

首先在order-service和product-service的pom文件中增加:

    <profiles><profile><id>dev</id><properties><profile.name>dev</profile.name></properties></profile><profile><id>prod</id><properties><profile.name>prod</profile.name></properties></profile></profiles>

在product-service的配置文件中,由于先读取先扫描bootstrap.yml配置文件再扫描application,yml配置文件,然后将两个配置文件进行整合。所以可以删除两文件中相同的代码,由于bootstrap.yml存在spring.profiles.active所以也可以不单独写一个总的application,yml

spring:application:name: product-serviceprofiles:active: @profile.name@cloud:nacos:config:server-addr: 39.102.210.73:8848
#        namespace: 4ce3624f-bd7e-4c10-a829-684d441bf51d
server:port: 9090
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/cloud_product?characterEncoding=utf8&allowPublicKeyRetrieval=true&useSSL=falseusername: rootpassword: "0304"driver-class-name: com.mysql.cj.jdbc.Drivercloud:nacos:discovery:server-addr: 39.102.210.73:8848
mybatis:configuration:map-underscore-to-camel-case: true  #配置驼峰⾃动转换
server:port: 9090
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/cloud_product?characterEncoding=utf8&allowPublicKeyRetrieval=true&useSSL=falseusername: rootpassword: "****"driver-class-name: com.mysql.cj.jdbc.Drivercloud:nacos:discovery:server-addr: 39.102.210.73:8848
mybatis:configuration:map-underscore-to-camel-case: true  #配置驼峰⾃动转换

十一,nacos和eureka区别

①Nacos除了服务发现和注册之外,还提供了配置中⼼,流量管理和DNS服务等功能

②Eureka遵循AP原则,Nacos可以切换AP和CP模式,默认AP.
        Nacos根据配置识别CP或者AP模式.如果注册Nacos的Client的节点是临时节点,那么Nacos对这个 Client节点的效果就是AP,反之是CP.AP和CP可以同时混合存在

③服务发现:
        Eureka:基于拉模式.EurekaClient会定期从Server拉取服务信息,有缓存,默认每30秒拉取⼀次.

        Nacos:基于推送模式.服务列表有变化时实时推送给订阅者,服务端和客⼾端保持⼼跳连接.

十二,完整代码链接

海豚/SpringCloud 完整代码https://gitee.com/ABdolphin/spring-cloud/tree/master/spring-cloud-nacos

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

相关文章:

  • 网站开发尺寸外贸做的亚马逊网站是哪个
  • Spring Boot OAuth2 GitHub登录的9大坑与终极避坑指南
  • 手机制作表白网站河北建设集团有限公司网站
  • 三门峡网站开发邹城有做网站的吗
  • 4成都网站建设网站开发后期维护更新
  • 关于ICG (integrate clock gating)
  • 关于socket网络通信的大小端转换
  • Kubernetes Service与Ingress全方位解析
  • 有哪些好的网站深圳网络推广专员
  • 苏州网站开发公司兴田德润简介建网站需要钱吗
  • 软装设计师常用网站做静态网站的开题报告
  • Go的JSON绑定:嵌入式结构体的扁平化序列化技巧
  • 车联网-合规测试:扫描UDS服务 || 模糊测试.[caringcaribou]
  • 2025-11-05 ZYZ28-NOIP模拟赛-Round2 hetao1733837的record
  • 菏泽网站建设菏泽众皓网站建设哪家公司便宜
  • 找做网站的人小程序登录失败
  • 网wordpress站底部图片悬浮长安做网站公司
  • 网站有二级域名做竞价重庆网站推广公司电话
  • 常州网站推广多少钱ui设计需要学编程吗
  • 安庆网站建设公司简旅游类网站怎么做
  • 国内知名的网站建设公司有哪些海口网站建设小强
  • 淘宝网站建设属于什么类目自媒体全平台发布
  • 【深入学习Vue丨第二篇】构建动态Web应用的基础
  • 怎么给网站做apiwordpress oss 静态
  • wordpress可以制作什么网站wordpress页面图片如何排版
  • 无纸化 SOP 怎么实现?电子厂作业指导书方案拆解!
  • 【穿越Effective C++】条款13:以对象管理资源——RAII原则的基石
  • 郑州 手机网站制作怎样建设个自己的网站
  • 网站 搜索引擎 提交网站建设百度云资源
  • 打工人日报#20251105