本文共 5995 字,大约阅读时间需要 19 分钟。
SpringCloud(一):服务注册与发现【Finchley版】
本文是 SpringCloud 系列第一篇文章服务注册与发现,服务注册与发现的组件在市面上有非常多的选择,我选取了 Eureka、Nacos、Consul 三种组件来研究学习。
【注】本系列学习 Demo 所使用环境
- JDK1.8
- SpringBoot 2.0.5.RELEASE
- SpringCloud Finchley.RELEASE
- SpringBoot/SpringCloud 基本依赖都放在父工程里面,具体的实现在module 中
Eureka 版
Eureka 是 Netflix 开源的一款提供服务注册和发现的产品,Eureka2.0已经闭源了,它提供了完整的Service Registry和Service Discovery实现。也是springcloud体系中最重要最核心的组件之一,在使用 Eureka 作为服务注册与发现时,我们需要手动配置 Eureka Server 服务器。
Eureka Server
创建一个 SpringBoot 项目,取名为 eureka-server ,我们只需要对 eureka-server 项目进行简单的改造。
- 在 pom.xml 中引入 Eureka Server
org.springframework.cloud spring-cloud-starter-netflix-eureka-server
- 在 SpringBoot 引导类上添加
@EnableEurekaServer
注解
@SpringBootApplication@EnableEurekaServerpublic class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); }}
- application.yml 中添加相关配置
server: port: 8081spring: application: name: eureka-servereureka: # eureka 相关配置 instance: hostname: localhost client: # 表示是否将自己注册到Eureka Server上,默认为true,当前应用为Eureka Server所以无需注册 register-with-eureka: false # 表示是否从Eureka Server获取注册信息,默认为true。因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设为false fetch-registry: false # Eureka Server的访问地址,服务注册和client获取服务注册信息均通过该URL,多个服务注册地址用,隔开 service-url: defaultZone: http://${ eureka.instance.hostname}:${ server.port}/eureka/
配置好之后启动 eureka-server 服务器,在浏览器中访问 ,不出意外的话,你将看到如下页面
从图中我们可以看出,还没有服务注册到该注册中心,下面我们将创建客户端Eureka Client
创建一个名为 eureka-client SpringBoot 工程,对 eureka-client 进行如下配置。
- 在 pom.xml 中添加
org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-netflix-eureka-client
- 在引导类上添加
@EnableEurekaClient
注解
@SpringBootApplication@EnableEurekaClientpublic class EurekaClientApplication { public static void main(String[] args) { SpringApplication.run(EurekaClientApplication.class, args); }}
- 修改 application.yml
server: port: 8082spring: application: name: eureka-client eureka: client: service-url: defaultZone: http://localhost:8081/eureka/
启动 eureka-client 服务,再次访问 ,不出意外的话,将有一个名为 EUREKA-CLIENT 注册上来
以上步骤我们就简单的搭建了一套基于 Eureka 的服务注册与发现服务Nacos 版
Nacos 是 Alibaba 开源的一款专注于动态服务发现,配置和服务管理的组件,Nacos提供四大功能:
-
服务发现和服务健康检查
Nacos使服务更容易注册自己并通过DNS或HTTP接口发现其他服务。Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求。 -
动态配置管理
动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新部署应用程序和服务的需要,这使配置更改更加高效和灵活。 -
动态DNS服务
Nacos支持加权路由,使您可以更轻松地在数据中心的生产环境中实施中间层负载平衡,灵活的路由策略,流量控制和简单的DNS解析服务。它可以帮助您轻松实现基于DNS的服务发现,并防止应用程序耦合到特定于供应商的服务发现API。 -
服务和元数据管理
Nacos提供易于使用的服务仪表板,可帮助您管理服务元数据,配置,kubernetes DNS,服务运行状况和指标统计。 更多 Nacos 介绍请参考
Nacos 服务端
要使用 Nacos 作为服务注册中心,需要下载官方的二进制文件,下载地址:https://github.com/alibaba/nacos/releases
解压下载的文件,在 Linux / Unix / Mac 平台上使用sh startup.sh -m standalone
命令,在 Windows 双击 startup.cmd 或者使用cmd startup.cmd -m standalone
命令,启动后访问 ,默认用户名密码 nacos,将看到如下界面,说明 Nacos 服务端搭建成功。 Nacos 客户端
创建一个名为 nacos-client 的 SpringBoot 项目,对 nacos-client 进行简单的配置。
- 在 pom.xml 中添加
org.springframework.cloud spring-cloud-starter-alibaba-nacos-discovery 0.2.2.RELEASE
- 在引导类上添加
@EnableDiscoveryClient
注解
@SpringBootApplication@EnableDiscoveryClientpublic class NacosClientApplication { public static void main(String[] args) { SpringApplication.run(NacosClientApplication.class, args); }}
- 修改application.yml 配置
server: port: 8083spring: application: name: nacos-client cloud: nacos: discovery: server-addr: 127.0.0.1:8848
启动 nacos-client ,再次访问http://127.0.0.1:8848/nacos
,查看服务列表,如果看到如下界面,说明服务注册成功。
Consul 版
Consul是一个分布式高可用的系统,是为基础设施提供服务发现和服务配置的工具.它提供以下关键特性:
-
服务发现
Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务. -
健康检查
Consul客户端可用提供任意数量的健康检查,指定一个服务(比如:webserver是否返回了200 OK 状态码)或者使用本地节点(比如:内存使用是否大于90%). 这个信息可由operator用来监视集群的健康.被服务发现组件用来避免将流量发送到不健康的主机. -
Key/Value存储
应用程序可用根据自己的需要使用Consul的层级的Key/Value存储.比如动态配置,功能标记,协调,领袖选举等等,简单的HTTP API让他更易于使用. -
多数据中心
Consul支持开箱即用的多数据中心.这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域. 这么一看跟nacos特别像,我个人觉得他两就是一样的,唯一的区别一个是国产的一个是进口货。Consul 的安装跟naocs一模一样,我们需要下载官方发布的服务端,下载地址https://www.consul.io/downloads.html
,下载相应的版本即可。 -
windows 下部署
解压下载的文件到安装目录,我解压到D:\simple-project\consul
,添加系统环境变量,在PATH加入consul的解压目录,例如我的D:\simple-project\consul
,打开cmd 运行consul agent -dev
命令就可以启动 consul 服务器 -
linux/unix
将下载的 consul 服务端解压到~/bin
目录,终端运行consul agent -dev
就可以启动 consul 服务器 启动成功后打开http://localhost:8500
,能成功访问并且看到如下界面说明安装成功。
consul 客户端
新建一个名为 consul-client 的 springboot 项目,我们还是对项目进行简单的改造。
- pom.xml 中添加依赖
org.springframework.cloud spring-cloud-starter-consul-discovery
- 在引导类上添加
@EnableDiscoveryClient
注解
@SpringBootApplication@EnableDiscoveryClientpublic class ConsulClientApplication { public static void main(String[] args) { SpringApplication.run(ConsulClientApplication.class, args); }}
- 修改 application.yml 配置
server: port: 8084spring: application: name: consul-client cloud: consul: # consul服务器ip host: localhost # consul端口 port: 8500 discovery: # 健康检查地址 health-check-path: ${ management.endpoints.web.base-path}/health # 健康检查时间 health-check-interval: 10s # 实例名称 instance-id: consul-clientmanagement: endpoints: web: base-path: /actuator
修改好之后,启动consul-client 项目,访问http://127.0.0.1:8500
,你将看到现在有两个服务实例了,consul-client实例成功注册上去了
本文demo下载 :
参考资料
nacos 官方文档
consul 官方文档 eureka 官方文档转载地址:https://blog.csdn.net/z694644032/article/details/96485619 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!