当前位置: 首页 > news >正文

SpringCloud 之 Eureka 配置,Eureka 集群,Eureka 监听

Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server,并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。

一、先来搭建一个 Eureka Server 作为注册中心

1.引入依赖

<!--添加eureka服务端-->      
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2.写配置

作为注册中心,端口号是 8001,服务名用的 service-eureka

#配置端口号
server:
  port: 8001

#服务名
spring:
  application:
    name: service-eureka

这个 eureka 配置目的就是把服务添加到注册中心去
注册的地址是:http://localhost:8001/eureka/

#eureka配置
eureka:
  client:
#    不把服务注册到注册中心
#    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://localhost:8001/eureka/
  server:
    #主动失效时间
    eviction-interval-timer-in-ms: 30000
    registry-sync-retry-wait-ms: 500
    a-s-g-cache-expiry-timeout-ms: 60000
    peer-eureka-nodes-update-interval-ms: 15000
    renewal-threshold-update-interval-ms: 300000
    #测试环境关闭自我保护模式
#    enable-self-preservation: false

3.启动器添加注解

添加 @EnableEurekaServer 启动注册中心
由于作为注册中心没有数据库这些玩意,所以启动报错了 @SpringBootApplication 后面添加
exclude= {DataSourceAutoConfiguration.class} 

@EnableEurekaServer
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

4.启动并访问注册中心

访问路径:localhost:8001


这里可以看到 service-eureka 作为一个服务注册到注册中心里了

二、写一个服务作为 Eureka 的客户端注册到注册中心

1.引入依赖

<!--添加eureka客户端-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2.写配置

微服务的端口号是 8084,服务名用的 service-admin

#配置端口号
server:
  port: 8084

#服务名
spring:
  application:
    name: service-admin

依然把服务添加到注册中心去
注册的地址依然是:http://localhost:8001/eureka/

#eureka配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8001/eureka/
    #间隔多少秒去服务端拉去注册信息
    registry-fetch-interval-seconds: 10
  instance:
    #发送心跳给server端频率
    lease-renewal-interval-in-seconds: 30
    #健康检查地址
    health-check-url-path: /actuator/health
    prefer-ip-address: true

3.启动器添加注解

@EnableEurekaClient 注解是基于spring-cloud-netflix依赖,只能eureka使用
@EnableDiscoveryClient 注解是基于spring-cloud-commons依赖,并且在classpath中实现
它们的作用是一样的,所以我选择 @EnableDiscoveryClient
添加 @EnableDiscoveryClient 将服务作为客户端注册到注册中心

@EnableDiscoveryClient
@SpringBootApplication
public class AdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminApplication.class, args);
    }
}

4.启动并访问注册中心

访问路径:localhost:8001

可以看到 admin 服务也成功注册到注册中心,说明配置成功

三、Eureka 集群

集群这种东西对于没接触过的人来说是个高大上的东西,但是对于接触过的人来说也就那样
Eureka 集群最主要的目的还是为了保证 Eureka 的稳定性,如果有个挂了,还有其他的Eureka 能担负起责任来

对配置文件稍微改动,变成 3 个 Eureka 的配置
可以看到通过 “---” 符号把配置文件分为 3 个配置,分别对应为 eureka1,eureka2,eureka3 以及各自的端口号
接下来我们可以通过 --spring.profiles.active=xx 去启动对用的配置

#eureka1 配置
server:
  port: 8001

spring:
  profiles: eureka1
  application:
    #配置服务名
    name: eureka1

#eureka配置
eureka:
  client:
#    是否将自己注册到eureka server
    register-with-eureka: true
#    避免eureka查找服务列表
    fetch-registry: false
    service-url:
      defaultZone: http://localhost:8001/eureka/,http://localhost:8002/eureka/,http://localhost:8003/eureka/
  server:
    #主动失效时间
    eviction-interval-timer-in-ms: 30000
    registry-sync-retry-wait-ms: 500
    a-s-g-cache-expiry-timeout-ms: 60000
    peer-eureka-nodes-update-interval-ms: 15000
    renewal-threshold-update-interval-ms: 300000
#    关闭保护机制,尽可能提出挂掉的服务节点
    enable-self-preservation: false

---
#eureka2 配置
server:
  port: 8002

spring:
  profiles: eureka2
  application:
    #配置服务名
    name: eureka2

#eureka配置
eureka:
  client:
#    是否将自己注册到eureka server
    register-with-eureka: true
#    避免eureka查找服务列表
    fetch-registry: false
    service-url:
      defaultZone: http://localhost:8001/eureka/,http://localhost:8002/eureka/,http://localhost:8003/eureka/
  server:
    #主动失效时间
    eviction-interval-timer-in-ms: 30000
    registry-sync-retry-wait-ms: 500
    a-s-g-cache-expiry-timeout-ms: 60000
    peer-eureka-nodes-update-interval-ms: 15000
    renewal-threshold-update-interval-ms: 300000
#    关闭保护机制,尽可能提出挂掉的服务节点
    enable-self-preservation: false

---
#eureka3 配置
server:
  port: 8003

spring:
  profiles: eureka3
  application:
    #配置服务名
    name: eureka3

#eureka配置
eureka:
  client:
#    是否将自己注册到eureka server
    register-with-eureka: true
#    避免eureka查找服务列表
    fetch-registry: false
    service-url:
      defaultZone: http://localhost:8001/eureka/,http://localhost:8002/eureka/,http://localhost:8003/eureka/
  server:
    #主动失效时间
    eviction-interval-timer-in-ms: 30000
    registry-sync-retry-wait-ms: 500
    a-s-g-cache-expiry-timeout-ms: 60000
    peer-eureka-nodes-update-interval-ms: 15000
    renewal-threshold-update-interval-ms: 300000
#    关闭保护机制,尽可能提出挂掉的服务节点
    enable-self-preservation: false

启动命令:

java -jar eureka.jar --spring.profiles.active=eureka1
java -jar eureka.jar --spring.profiles.active=eureka2
java -jar eureka.jar --spring.profiles.active=eureka3

或者你和我一样通过 Idea 之类的去启动的,可以这样

使用三个启动类,每个启动类配置不同的 Activc profiles 来启动
通过 defaultZone 把多个 Eureka 注册上,这样一个 Eureka 挂了,还能通过其他 Eureka 来使用

四、Eureka 监听

有些时候只是当靠 Eureka 的监控并不能满足我们的需求,比如我们需要知道,哪些服务经常挂掉又重连了之类的
我们可以弄个简单的监听器进行监听

EurekaStateChangeListener.java

/**
 * Eureka事件监听
 *
 * @Author: author
 * @Date: 2018/11/6 15:29
 */
@Component
public class EurekaStateChangeListener {

    private static final Logger LOGGER = LoggerFactory.getLogger(EurekaStateChangeListener.class);

    @EventListener
    public void listen(EurekaInstanceCanceledEvent event) {
        LOGGER.info(event.getServerId() + "\t" + event.getAppName() + " 服务下线");
    }

    @EventListener
    public void listen(EurekaInstanceRegisteredEvent event) {
        InstanceInfo instanceInfo = event.getInstanceInfo();
        LOGGER.info(instanceInfo.getAppName() + "进行注册");
    }

    @EventListener
    public void listen(EurekaInstanceRenewedEvent event) {
        LOGGER.info(event.getServerId() + "\t" + event.getAppName() + " 服务进行续约");
    }

    @EventListener
    public void listen(EurekaRegistryAvailableEvent event) {
        LOGGER.info("注册中心 启动");
    }

    @EventListener
    public void listen(EurekaServerStartedEvent event) {
        LOGGER.info("Eureka Server 启动");
    }
}

简单效果图:

相关文章:

  • 我的程序人生:码农
  • Vue 新手学习笔记:vue-element-admin 之按钮级权限管控
  • SpringBoot 集成 Druid 配置及数据库密码加密
  • MySQL 集群(一):Docker 搭建 MySQL,MySQL 主从同步搭建及踩坑
  • MySQL 集群(二):Atlas 结合 Docker MySQL 实现读写分离与验证
  • Jenkins + Docker 部署,使用,持续集成以及踩坑
  • Docker 删除 Exited 容器以及删除 none 镜像
  • LeetCode Java 深度优先算法(DFS)实现岛屿个数计算,附带详细分析
  • LeetCode Java 队列结合广度优先算法(BFS)实现岛屿个数计算,附带详细分析
  • navicat连接oracle报错:ORA-12737 Instant Client Light:unsupported server character set ZHS16GBK
  • Spring Boot,Spring Cloud,Spring Cloud Alibaba 版本选择说明以及整理归纳
  • RestTemplate 工具类
  • SpringCloud 之 Ribbon
  • SpringCloud 之 Hystrix 断路器,服务降级,自定义配置
  • Oracle 让指定数据排在最前面
  • php的引用
  • [译] 怎样写一个基础的编译器
  • 08.Android之View事件问题
  • CentOS6 编译安装 redis-3.2.3
  • classpath对获取配置文件的影响
  • es的写入过程
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Java到底能干嘛?
  • Mac转Windows的拯救指南
  • MYSQL 的 IF 函数
  • Node + FFmpeg 实现Canvas动画导出视频
  • Python十分钟制作属于你自己的个性logo
  • Unix命令
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 全栈开发——Linux
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 消息队列系列二(IOT中消息队列的应用)
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 携程小程序初体验
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • mysql面试题分组并合并列
  • #Linux(帮助手册)
  • #Z2294. 打印树的直径
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (06)金属布线——为半导体注入生命的连接
  • (2020)Java后端开发----(面试题和笔试题)
  • (C++)八皇后问题
  • (ZT)薛涌:谈贫说富
  • (ZT)一个美国文科博士的YardLife
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (十三)Flask之特殊装饰器详解
  • (转)Google的Objective-C编码规范
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)可以带来幸福的一本书
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET MVC之AOP
  • .net web项目 调用webService