SpringCloud-Eureka:服务的注册与发现

摘要

  微服务架构中,会将系统按照模块拆分为多个服务,一般都会使用服务治理工具管理各个服务。Eureka就是一种服务治理工具,本文将介绍如何使用Eureka。

参考文档:http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html
略:11.3-11.11、12.3-12.7

正文

  使用Eureka时,每个服务将通过Eureka客户端注册到Eureka服务端。在Eureka服务端,我们可以看到每个注册进来的服务的运行信息。

如何搭建Eureka服务端

  准备工作:新建SpringBoot项目eureka-server,仅仅加入启动方法即可。下面演示如何将该项目改造为Eureka服务端。

  • 加入Eureka服务端依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  • 启动类标记@EnableEurekaServer注解
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication{
    public static void main(String[] args) {
        new SpringApplicationBuilder(EurekaApplication.class).web(true).run(args);
    }
}

  最简单的Eureka服务端已经搭建完成。每个服务端都是一个客户端,最好为其配置Eureka服务端地址并关闭部分客户端功能。

  • 修改配置文件
server:
    port: 8761 

eureka:
    instance:
        hostname:localhost 
    client:
        registerWithEureka: false 
        fetchRegistry: false 
        serviceUrl:
            defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

  以上配置为单一Eureka服务端配置,为了保证高可用,可以通过多个Eureka互相注册形成Eureka服务端集群。

如何包含Eureka客户端

  准备工作:新建SpringBoot项目user-service,作为系统的用户服务。下面以用户服务为例,介绍如何包含Eureka客户端注册并到Eureka服务端。

  • 加入Eureka客户端依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 配置Eureka服务端地址
eureka:
    client:
        serverUrl:
            defaultZone: http://localhost:8761/eureka/

  启动程序,访问http://localhost:8761/eureka/,会发现该服务以及被Eureka客户端注册到在Eureka服务端。

  Eureka客户端会将spring.application.nameserver.port作为默认程序名、虚拟主机名、端口注册到Eureka服务端,其他实例信息通过配置eureka.instance.*获取。

  有关更多配置信息,查看类EurekaInstanceConfigBeanEurekaClientConfigBean

  若希望禁用Eureka客户端,配置eureka.client.enable=false

自我保护模式

自我保护模式的表现形式
进入自我保护模式,会在首页以红色字体输出以下内容
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

为什么要有自我保护模式
默认情况,在一定时间内未接收到某个微服务实例的心跳,会注销该实例(默认90s)。当网络分区故障时,微服务和Eureka Server无法通信,会注销本不该注销的微服务,自我保护模式可以解决该问题。

自我保护模式的具体会做什么
当前Eureka Server短时间丢失多个客户端,则该节点进入保护模式,即:保护服务注册信息,不会注销任何微服务。故障恢复后,会自动退出自我保护模式。

禁用自我保护模式
eureka.server.enable-self-preservation=false

常用配置

服务端常用配置
参数默认值说明
eureka.server.enable-self-preservationfalse是否开启自我保护模式
客户端常用配置
参数默认值说明
eureka.instance.prefer-id-addressfalse使用ip代替hostname显示在注册中心
eureka.instance.lease-renewal-in-seconds30服务续约任务间隔
eureka.instance.lease-expiration-duration-in-seconds90服务失效时间

添加用户认证

第一步:添加spring-boot-starter-security依赖

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

第二步:添加配置

security:
    basic:
        enabled: true       #开启给予HTTP basic的认证
    user:
        name: user
        password: password

注:默认账号是user,密码是随机值,在启动时打印出来。
此时浏览器访问http:ip:port/会弹出身份验证对话框。

第三步:微服务注册认证

修改client.serviceUrl.defaultZone配置即可

    eureka:
        serviceUrl:
            defaultZone: http://user:password@ip:port/eureka/

常用配置
https://blog.csdn.net/shog808/article/details/77161071

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值