为了账号安全,请及时绑定邮箱和手机立即绑定

SpringCloud微服务的注册与发现

标签:
Spring Cloud

书接上文,我们需要解决硬编码调用服务接口的问题,解决这个问题我们需要一个强大的服务发现机制,服务消费者使用这个服务发现机制来获取服务提供者的网络信息。当然,服务提供者需要把自己的信息注册到这个服务发现。这样即是服务提供者信息发生变化,也不需要服务消费者修改配置信息。

基本架构

服务提供、服务消费和服务发现组件之间的关系如下图所示


webp

服务发现架构图

当服务提供者网络地址发生变化,会重新注册到服务发现组件。Spring Cloud 提供了多种服务发现组件的支持,比如 Euraka、Consul 和 Zookeeper 等,我们就以 Euraka 为主,毕竟他是 SpringCloud 的嫡系部队。

Eureka 原理

webp

Eureka 架构图


上图的组件较多,但主要的是服务端和客户端,服务端提供服务发现能力,客户端是一个 java 客户端,简化与服务端的操作。服务端和客户端之间通过心跳来维持通信检测。同时提供客户端缓存机制来加速客户端使用。

编写Eureka服务

大概理论一带而过,我们主要先是要使用它。下面就开始编写一个 Eureka 服务

1、 创建 maven 工程,增加 Euraka 依赖


webp


webp


修改 application.properties为 yml 文件,之后都是这样不再赘述
修改服务端口为8050,增加 Euraka 配置

server:
  port: 8050eureka: 
  client:
    fetch-registry: false
    register-with-eureka: false 
    serviceUrl: 
      defaultZone: http://localhost:8050/eureka/

说明:

registerWithEureka: false表示十分把自己注册到 Eureka 服务,默认是 true,这里设置不把自己注册进去
fetchRegistry: false 表示是否从其他 EurakaServer 获取信息,默认是 true,这里是单点的,设置 false
defaultZone: http://localhost:8050/euraka 设置与 Euraka 交互地址,多个地址用逗号分隔

需要在启动类上进行配置
只需要增加一行标注@EnableEurekaServer即可

启动服务查看信息

webp


看到这个界面就表示 euraka 单机服务正常启动了。

增加服务发现

先把 user 服务提供者注册到 eureka 上,首先在 userpom 上增加 eureka 客户端依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.3.5.RELEASE</version>
        </dependency>

然后在 yml 里面增加 eureka 客户端配置信息

spring:
  application:
    name: ms-simple-provider-user
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8050/eureka/
  instance:
    prefer-ip-address: true

说明:
spring.application.name表示注册到 eureka 服务的名字
prefer-ip-address 表示把自己的 ip 注册到服务器,否则会是机器名字。

最后修改 user 启动类,增加服务发现的注解,只需要增加@EnableDiscoveryClient即可;

同样处理下消费服务的注册

服务启动和测试

依次打开 eureka 和 user,movie


webp


webp

eureka 服务高可用

从上面得知,目前是一个单节点的 eureka 服务,有单点故障的问题存在,为了解决这个问题,需要实现高可用部署

webp


按照之前的步骤构建一个新的 eureka 服务
修改新的 euraka 的齐大雷,增加@EnableEurekaServer标注


之后对两个eureka 服务的 yml进行配置,现在 host 文件添加
127.0.0.1 eureka1,eureka2来使得可以使用这两个域名进行配置
首先对之前第一个 yml 修改为

server:
  port: 8050spring:
  application:
    name: eureka-server

eureka:
  instance:
    hostname: eureka1
  client:    #fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这里设置为false
    #register-with-eureka: false # 表示是否将自己注册到Eureka Server,默认为true.由于当前应用就是Eureka Server,故而设置为false.
    service-url:
      # 设置与Eureka Server的地址,查询服务和注册服务都需要依赖这个地址.默认是http://localhost:8050/eureka/;多个地址可使用','风格.
      defaultZone: http://eureka2:8051/eureka/

第二个 yml 修改为

server:
  port: 8051spring:
  application:
    name: eureka-server

eureka:
  instance:
    hostname: eureka2
  client:    #fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这里设置为false
    #register-with-eureka: false # 表示是否将自己注册到Eureka Server,默认为true.由于当前应用就是Eureka Server,故而设置为false.
    service-url:
      # 设置与Eureka Server的地址,查询服务和注册服务都需要依赖这个地址.默认是http://localhost:8050/eureka/;多个地址可使用','风格.
      defaultZone: http://eureka1:8050/eureka/

启动这两个 eureka 服务,分别浏览 http://eureka1.8050http://eureka2:8051 可以看到各自的registered-replicas

webp


webp


应用注册到集群上

回到 user 和 movie 服务模块,修改他们的 defaultZone 为:

eureka:
  client:
    service-url:
      defaultZone: http://eureka1:8050/eureka/,http://eureka2:8051/eureka/

分别启动他们,可以在 eureka 集群看到


webp


webp

eureka 服务验证

我们的注册服务一直是可以匿名的形式,我们需要增加他的安全性,设置一些账号密码来加强

首先在 eureka1和 eureka2的 pom 中增加依赖

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

在各自的 yml 中配置账号密码

security:
  basic:
    enabled: true
  user:
    name: abc
    password: 123

打开 eureka 服务就会出现


webp


输入账号和密码可使用

其他微服务需要配置用户名和密码方可注册使用,如下代码示例

eureka:
  client:
    service-url:
      defaultZone: http://abc:123@eureka1:8050/eureka/,http://abc:123@eureka2:8051/eureka/



作者:breezedancer
链接:https://www.jianshu.com/p/dd91b7dd0df7


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消