ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

SpringCloud 使用nacos实现服务注册与发现

2022-10-01 21:25:16  阅读:35  来源: 互联网

标签:


作用:springboot是单独的项目,而这个作用是让两个独立的springboot项目,能够访问到,实现双方的需求

疑问 子项目中加了relativePath也不会报错 在本地仓库寻找

0. 我的环境

Windows10

JDK8

SpringCloud:Hoxton.SR1

SpringBoot:2.2.4.RELEASE

spring-cloud-alibaba-dependencies:2.1.1.RELEASE(注意:包名是以com.alibaba.cloud开头)

Nacos-server:NACOS1.1.4

1. Spring Cloud Alibaba介绍

2018 年 10 月 31 日的凌晨,Spring Cloud Alibaba 正式入驻了 Spring Cloud 官方孵化器,并在 Maven 中央库发布了第一个版本。

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统

主要功能包括:

服务限流降级:默认支持 Servlet、Feign、RestTemplate、Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。

服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。

分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。

消息驱动能力:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。

分布式事务:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。

阿里云对象存储:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。

分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。

阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道

组件

Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性

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

RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务

Dubbo:Apache Dubbo 是一款高性能 Java RPC 框架

Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案

Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品

Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据

Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务

Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道

2. 启动nacos服务(单机模式&内嵌数据库)

0.前提:配置环境变量,不配置会导致无法运行Nacos

1.下载源码或者安装包

安装包地址:

2.解压后进入nacos/bin目录

3.输入命令启动服务

linux:sh startup.sh -m standalone

windows:cmd startup.cmd

4.控制台启动下,看到"Nacos started successfully in stand alone mode.”后表示服务已启动

5.nacos默认使用8848端口,可通过进入自带的控制台界面,默认用户名/密码是nacos/nacos

3. 配置集群(略)

4. 配置Mysql(单机版)

默认使用嵌入式数据库,0.7版本以后增加支持mysql数据源能力

1.初始化nacos相关表:运行conf/nacos-mysql.sql文件

2.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码

spring.datasource.platform=mysql

# 指定数据库实例数量

db.num=1

# 第一个数据库实例地址

db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true

db.user=root

db.password=123

3.配置后输入命令启动服务(参照上文后续启动服务命令)

注1:直接下载的稳定版本nacos编译后的文件,不支持mysql8及其以上版本,所以要

db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8mb4&connectTimeout=1000&socketTimeout=3000&autoReconnect=true

注2:生产环境下nacos持久化的mysql数据库,应该是一个高可以的集群,而非单机版,保存系统的安全性和可用性

5 nacos实现服务注册

0.启动Nacos Server

1.添加Nacos的依赖,同时去掉Eureka依赖,另外,还要去掉依赖 spring-cloud-starter-netflix-eureka-client依赖。

详情见:资料/pom-主模块.xml

<!--关键依赖如下,一定要注意版本冲突的问题-->

<dependencyManagement>

<dependencies>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-dependencies</artifactId>

<version>Hoxton.SR1</version>

<type>pom</type>

<scope>import</scope>

</dependency>

<dependency>

<groupId>com.alibaba.cloud</groupId>

<artifactId>spring-cloud-alibaba-dependencies</artifactId>

<version>2.1.1.RELEASE</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

<!-- 1. nacos-服务发现功能依赖 -->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

<version>0.2.2.RELEASE</version>

</dependency>

<!-- 2. nacos-配置管理功能依赖,目前用不到 -->

<!-- <dependency>-->

<!-- <groupId>org.springframework.cloud</groupId>-->

<!-- <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->

<!-- <version>0.2.2.RELEASE</version>-->

<!-- </dependency>-->

注意:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。

例如:springboot2.2.4.RELEASE对应0.2.2RELEASE

2.修改application.properties。添加一些关于Nacos的配置,去掉关于Eureka配置

#指定nacos的ip和端口号,向nacos注册

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

注1:nacos更好的访问的方式:不是通过IP,而是通过虚拟域名来访问(建议)

1.打开hosts,C:WindowsSystem32driversetchosts,末尾添加1行

127.0.0.1

//另外,hosts有可能会报无权限操作,将hosts文件复制到其它位置,修改后再copy覆盖原位置的文件即可

2.修改nacos客户端配置

spring.cloud.nacos.discovery.server-addr=

@SpringBootApplication

//@EnableEurekaClient

@EnableDiscoveryClient

public class ProviderApplication {...}

启动你的应用即可,至此,你已实现 “零行代码使用 Nacos 替换 Eureka”!

附录一:dependencyManagement和dependencies的区别

1.dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)

2.dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。

如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,

并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本

附录二:windows中nacos启动失败,显示8848端口被占用

方案一:重启电脑

方案二:修改nacos/conf/application.properties文件中的端口号,例如:

server.port=8848 ==> server.port=18848

附录三:win10系统端口被占用怎解决

1. 开始---->运行---->cmd,以<<<管理员>>>身份调出命令窗口

2. 查看被占用端口对应的PID(即进程ID),输入命令:netstat -aon|findstr "端口号",回车,记下最后一位数字,即PID,

示例如下:

#查看端口8005的使用情况

netstat -aon|findstr "8005"

#命令窗口显示的数据格式如下:

TCP 127.0.0.1:8005 0.0.0.0:0 LISTENING 14700

注1:netstat -ano命令可以用来查看所有端口使用情况,netstat -ano | findstr "8005" 查看指定端口号的使用情况

注2:cls命令可以用来清屏

3. 根据PID查找进程

继续输入tasklist|findstr "14700",回车,查看是哪个进程或者程序占用了8005端口,结果是: javaw.exe

javaw.exe 14700 Console 1 313,864 K

4. 此时结果已经很明白了,接下来我们可以到控制面板中的服务区查看此进程,手动关掉它。也可以在cmd中通过命令来关闭它,输入:

taskkill /f /t /im javaw.exe

附录四:nacos数据持久化

Nacos采用了集中式存储的方式来支持集群化部署,目前只要支持MySQL的存储

配置Nacos的MySQL存储只需要下面三步

1.安装数据库,版本要求:5.6.5+. ,原版下载的nacos不支持mysql8.0,因为驱动版本太低,需要从git下载naocs源码自行修改

2.初始化MySQL数据库,数据库初始化文件:nacos-mysql.sql,该文件可以在Nacos程序包下的conf目录下获得。

3.修改conf/application.properties文件,增加支持MySQL数据源配置,添加(目前只支持mysql)数据源的url、用户名和密码。配置样例如下

spring.datasource.platform=mysql

db.num=1

db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true

db.user=root

db.password=123

标签:
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有