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

spring cloud alibaba nacos 服务注册

版本选择:链接

1. 下载安装

nacos下载:链接

1. 配置nacos的数据库

nacos-server-2.3.2.zip解压后,进入conf目录

  1. 创建nacos的数据库
    数据库文件: /nacos/conf/mysql-schema.sql
  2. 修改application.properties文件,创建数据库的名字,用户,密码修改配置文件
# nacos 使用的数据库配置
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
spring.datasource.platform=mysql
spring.sql.init.platform=mysql### Count of DB:
db.num=1### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=123456

2. 启动nacos

进入nacos的bin目录

// 启动nacos
[root@centos9 bin]# ./startup.sh
// 关闭nacos
[root@centos9 bin]# ./shutdown.sh
// 查看nacos的运行情况
[root@centos9 bin]# cat /opt/springcloud/nacos/logs/start.out

当显示nacos图标时,nacos启动成功:

[root@centos9 bin]# cat /opt/springcloud/nacos/logs/start.out
/www/server/java/jdk-17.0.8/bin/java   -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Xlog:gc*:file=/opt/springcloud/nacos/logs/nacos_gc.log:time,tags:filecount=10,filesize=100m -Dloader.path=/opt/springcloud/nacos/plugins,/opt/springcloud/nacos/plugins/health,/opt/springcloud/nacos/plugins/cmdb,/opt/springcloud/nacos/plugins/selector -Dnacos.home=/opt/springcloud/nacos -jar /opt/springcloud/nacos/target/nacos-server.jar  --spring.config.additional-location=file:/opt/springcloud/nacos/conf/ --logging.config=/opt/springcloud/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288,--.,--.'|,--,:  : |                                           Nacos 2.3.2
,`--.'`|  ' :                       ,---.               Running in stand alone mode, All function modules
|   :  :  | |                      '   ,'\   .--.--.    Port: 8848
:   |   \ | :  ,--.--.     ,---.  /   /   | /  /    '   Pid: 1391567
|   : '  '; | /       \   /     \.   ; ,. :|  :  /`./   Console: http://192.168.3.234:8848/nacos/index.html
'   ' ;.    ;.--.  .-. | /    / ''   | |: :|  :  ;_
|   | | \   | \__\/: . ..    ' / '   | .; : \  \    `.      https://nacos.io
'   : |  ; .' ," .--.; |'   ; :__|   :    |  `----.   \
|   | '`--'  /  /  ,.  |'   | '.'|\   \  /  /  /`--'  /
'   : |     ;  :   .'   \   :    : `----'  '--'.     /
;   |.'     |  ,     .-./\   \  /            `--'---'
'---'        `--`---'     `----'

3. 登录配置中心

IP:8848/nacos

页面:
在这里插入图片描述

4. 关于鉴权,查看官网文档

官网关于鉴权的网页链接,查看网页中的服务端如何开启鉴权部分

2. 注册服务

参考 spring cloud alibaba 官网 ( 链接 )中 接入 Nacos 服务注册与发现 部分

1. 创建一个maven工程

不直接创建springboot项目,引入springbootweb的依赖,创建一个web工程

  • 截取部分pom
    <properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-boot.version>3.2.4</spring-boot.version><spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- nacos 的服务注册依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!--引入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></dependencies></dependencyManagement>

2. yml配置

server:port: 8001
spring:application:name: nacos-providercloud:nacos:server-addr: centos9-server:8848username: nacospassword: nacosdiscovery:
#        server-addr: ${spring.cloud.nacos.server-addr} # 默认值: ${spring.cloud.nacos.server-addr}
#        username: ${spring.cloud.nacos.username} # 默认值: ${spring.cloud.nacos.username}
#        password: ${spring.cloud.nacos.password} # 默认值: ${spring.cloud.nacos.password}

3. 启动web项目

启动后会在服务列表中看到
在这里插入图片描述

4. 注册端口9848

配置文件里设置server.port=8848 时,客户端会先通过 8848 端口获取 Nacos 服务器的元信息,其中就包含了 gRPC 端口信息,之后再使用 gRPC 端口 9848 来进行后续的服务注册与发现操作。

3. 服务配置

1. 命名空间

  1. 在nacos中创建命名空间
    在这里插入图片描述
  2. 在yml中指定命名空间,默认为public
    注意:namespace的值是命名空间ID
      discovery:
#        server-addr: ${spring.cloud.nacos.server-addr} # 默认值: ${spring.cloud.nacos.server-addr}
#        username: ${spring.cloud.nacos.username} # 默认值: ${spring.cloud.nacos.username}
#        password: ${spring.cloud.nacos.password} # 默认值: ${spring.cloud.nacos.password}namespace: 7749e5ab-e65b-4a5c-a36c-4978fadcfef3
  1. 启动项目
    会在相应的命名空间中看到注册的服务
    在这里插入图片描述

2. 分组名称

配置:group。 默认分组:DEFAULT_GROUP

  cloud:nacos:discovery:......service: provider-3-change-name # 服务名 默认值: ${spring.application.name}group: A-group  # 分组名称metadata: # 自定义元数据version: 1.0.0env: test

3. 服务名称

配置:service。 默认是spring.application.name的名字

  cloud:nacos:discovery:......service: provider-3-change-name # 服务名 默认值: ${spring.application.name}

在这里插入图片描述

4. 实例数

  • 命名空间、分组名称、服务名称3个都相同的就是相同的实例
  • 相同的实例应提供的服务是相同的
    在这里插入图片描述

5. 服务的元数据

配置:metadata。
metadata是map结构,key和value随意指定

  cloud:nacos:discovery:......metadata: # 自定义元数据version: 1.0.0env: test

在这里插入图片描述

6. 集群配置

相同的服务,分配在不同的机房

discovery:...cluster-name: beijing-lian-tong

在这里插入图片描述
在这里插入图片描述

7. 权重

负载均衡

spring:...discovery:weight: 10

8. 心跳相关

服务向nacos发送心跳设置

spring:discovery:# 心跳设置,单位毫秒heart-beat:enabled: true # 是否开启心跳heart-beat-interval: 5000 # 心跳间隔时间heart-beat-timeout: 10000 # 不发送心跳后,从健康转为不健康的时间ip-delete-timeout: 30000 # 从不健康到实例下线时间

4. 消费服务

只能消费命名空间、分组名称相同的服务

  1. yml配置与服务相同
  2. 代码
@RestController
public class Consumer1Controller {private RestTemplate restTemplate = new RestTemplate();@Autowiredprivate DiscoveryClient  discoveryClient;@GetMapping("/consumer1")public String hello(){// 获取在同一命名空间,同一组中的所有服务的服务名称(结果中也包括自己的名称)List<String> services = discoveryClient.getServices();// 根据服务名获取实例List<ServiceInstance> instances = discoveryClient.getInstances("provider-8001");if (CollectionUtils.isEmpty(instances)) throw new RuntimeException("没有找到服务");// 获取实例列表中的任一实例ServiceInstance serviceInstance = instances.get(0);// 获取该实例的端口号和ipString host = serviceInstance.getHost();int port = serviceInstance.getPort();// 向服务发送请求,并返回结果String url = "http://"+host +":"+ port+"/hello?name=张三";String result = restTemplate.getForObject(url, String.class);return result;}

5. 对外暴漏端点,为监控服务

增加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

yml中配置:

spring:.....
management:endpoints:web:exposure:include: "*"

相关文章:

  • 回溯进阶(一):以全排列问题为例,来展示如何对回溯的纵向和横向进行操作
  • 成功解决 AttributeError: module ‘pathlib‘ has no attribute ‘_Accessor‘
  • gbase8s数据库 tcp连接不同阶段的超时处理
  • BFC理解
  • 60页PDF | 四川电信数据湖 + 数据中台实施方案:覆盖数据能力、数据资产及数据治理的全流程建设指南
  • spring cloud gateway 断言(Predicates)与过滤器(filters)
  • day009-用户管理专题
  • Go语言八股之channel详解
  • 火绒互联网安全软件:自主引擎,精准防御
  • 迈向AI辅助数据分析代码生成的透明性与知识共享
  • Java游戏服务器开发流水账(1)游戏服务器的架构浅析
  • 【C++游戏引擎开发】第32篇:物理引擎(Bullet)—约束系统
  • java基础-数组
  • 【AI论文】
  • oracle 数据库sql 语句处理过程
  • 用 NGINX 打造高性能 FastCGI 加速 `ngx_http_fastcgi_module`
  • RabbitMQ高级特性
  • LeetCode 267:回文排列 II —— Swift 解法全解析
  • lc3341. 到达最后一个房间的最少时间 Ⅰ 算法解析
  • LeetCode20_有效的括号
  • 印度一战机在巴基斯坦旁遮普省被击落,飞行员被俘
  • 央行:中国政府债务扩张仍有可持续性
  • 14岁女生瞒报年龄文身后洗不掉,法院判店铺承担六成责任
  • 新村回响:一周城市生活
  • 近4小时会谈、3项联合声明、20多份双边合作文本,中俄元首今年首次面对面会晤成果颇丰
  • 2024年上市公司合计实现营业收入71.98万亿元