SpringCloud(一)服务注册与发现【Finchley版】
发布日期:2021-09-18 10:05:48 浏览次数:15 分类:技术文章

本文共 5995 字,大约阅读时间需要 19 分钟。

SpringCloud(一):服务注册与发现【Finchley版】

微服务在当下非常盛行,绝大多数的 Java 开发者都在使 SpringBoot/SpringCloud 进行项目开发,由于对微服务这一块比较感兴趣,刚才公司有项目在使用 SpringCloud 组件进行项目开发,最近项目也不是特别忙,有点时间来倒腾 SpringCloud 这套微服务框架,网上有非常多 SpringCloud 相关的资料,本系列学习 Demo 参考了大量网上教材,所谓的站在巨人的肩膀上,猪都能够飞一段距离。微服务架构主要包含服务注册与发现、服务调用、熔断限流、服务路由、配置中心等。

本文是 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-server.png
从图中我们可以看出,还没有服务注册到该注册中心,下面我们将创建客户端

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-client.png
以上步骤我们就简单的搭建了一套基于 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服务未注册.png

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,查看服务列表,如果看到如下界面,说明服务注册成功。

nacos服务注册.png
一个简单版的 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服务未注册.png

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实例成功注册上去了

consul服务注册.png

本文demo下载 :

参考资料

nacos 官方文档

consul 官方文档
eureka 官方文档

在这里插入图片描述

扫码关注公众号一起交流学习呗

转载地址:https://blog.csdn.net/z694644032/article/details/96485619 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SpringCloud(二):服务提供与调用【Finchley版】
下一篇:list遍历方式效率分析

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月27日 20时04分32秒