一,应用场景:多个服务启动后可能会因为一些其他或者内在原因导致服务会挂掉,而我们维护人员不知情的情况下服务会一直挂到有人发现为止,

所以我们需要对Eureka的各个服务进行监听,当他们发生上线,下线,启动等,利用短信,邮箱等通知维护人员,维护人员会第一时间了解服务情况,进行处理。

二.Eureka服务状态分类

Eureka的server端会发出5个事件通知,分别是:

2.1  EurekaInstanceCanceledEvent                     当有服务下线时会执行(掉线顾名思义,就是某个服务关闭时触发)
2.2  EurekaInstanceRegisteredEvent                   当有服务注册时会执行(注册中心检测到有新的服务注册进来时触发)
2.3  EurekaInstanceRenewedEvent                     当有服务续约时会执行(服务设置了心跳时间,如果下一次心跳还正常,就会把服务续约的信息更新到自身的Eureka Server中,然后再同步到其它Eureka Server中)
2.4  EurekaRegistryAvailableEvent                      Eureka 注册中心启动执行

2.5  EurekaServerStartedEvent                            Eureka Server 启动时执行

那接下来就好说了

第一步 : 引入maven依赖

略: 就是基本的依赖

第二步 : 监听服务

在网上查询了部分资料之后,发现部分的博客缺少一些东西,会对新手有很多的误导,在这里给出一个详细的步骤

 

  Eureka服务端的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server:
  port: 9999
 
spring:
  application:
    name: eureka01
  security:
    user:
      name: root
      password: root
 
eureka:
  client:
    register-with-eureka: false #是否注册给服务中心,本身就是注册中心,所以不需要注册
    service-url:
      defaultZone: http://root:root@localhost:9997/eureka/,http://root:root@localhost:9998/eureka/   #分别指向除自己外的注册中心地址,多个地址之间用“,”号隔开
  server:
    enable-self-preservation: false   # 测试时关闭自我保护机制,保证不可用服务及时踢出
    eviction-interval-timer-in-ms: 5000 # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)

  

服务配置这里的 关闭自我保护和清理间隔一定要打开 (虽然我也不知道为什么)

启动类

package com.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
 * Hello world!
 *
 */
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer  extends WebSecurityConfigurerAdapter{
    public static void main( String[] args ) {

        SpringApplication.run(EurekaServer.class, args);
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();//关闭csrf
        super.configure(http);
    }
}

 

  服务监听类

 

package com.web.event;

import com.netflix.appinfo.InstanceInfo;
import lombok.extern.log4j.Log4j2;
import org.springframework.cloud.netflix.eureka.server.event.*;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

@Log4j2
@Component
public class EurekaStateListener {
    //private final static Logger logger = LoggerFactory.getLogger(EurekaStateListener.class);

    @EventListener
    public void listen(EurekaInstanceCanceledEvent event) {
        log.info("服务{}已下线", event.getAppName());
        log.info("server地址信息{}", event.getServerId());
    }

    @EventListener
    public void listen(EurekaInstanceRegisteredEvent event) {
        InstanceInfo instanceInfo = event.getInstanceInfo();
        log.info("服务{}进行注册", instanceInfo.getAppName()+ instanceInfo.getHostName() +"  "+ instanceInfo.getIPAddr() +"  "+ instanceInfo.getPort());
    }

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

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

    @EventListener
    public void listen(EurekaServerStartedEvent event) {
        log.info("注册中心服务端启动,{}", System.currentTimeMillis());
    }
}

这里只是简单的记录,实际项目还是要做大量的通知,如果有注册中心是集群,挨个如上配置即可,我这就是集群的配置,以一个作文样列,就不每个都展示出来了。

 

第三步 : 客户端

       客户端配置

server:
  port: 8032

spring:
  application:
    name: productAclient

eureka:
  instance:
    lease-renewal-interval-in-seconds: 1 #每间隔10s,向服务端发送一次心跳
    lease-expiration-duration-in-seconds: 2 #如果我2s之内没有给你发心跳,就代表我“死”了,将我踢出掉。
    prefer-ip-address: true
    hostname: 192.168.1.83
    instance-id:  ${eureka.instance.hostname}:${server.port}
  client:
    service-url:
      defaultZone: http://root:root@localhost:9998/eureka/,http://root:root@localhost:9997/eureka/,http://root:root@localhost:9999/eureka/

这里的instance配置一定要写,很多新手忘记写这个导致服务下线无法被监听,因为服务下线后eureka没有将该服务踢出

 

启动类

package com.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

/**
 * Hello world!
 *
 */
@SpringBootApplication
@EnableEurekaClient
public class productA_Client {

    public static void main( String[] args ) {
        SpringApplication.run(productA_Client.class);

    }


}

 

第四步 : 测试看效果

启动注册中心

2019-07-10 11:10:33.966  INFO 17696 --- [      Thread-30] c.n.e.r.PeerAwareInstanceRegistryImpl    : Changing status to UP
2019-07-10 11:10:33.974  INFO 17696 --- [      Thread-30] e.s.EurekaServerInitializerConfiguration : Started Eureka Server
2019-07-10 11:10:33.977  INFO 17696 --- [      Thread-30] com.web.event.EurekaStateListener        : 注册中心启动,1562728233974
2019-07-10 11:10:33.978  INFO 17696 --- [      Thread-30] com.web.event.EurekaStateListener        : 注册中心服务端启动,1562728233978
2019-07-10 11:10:33.990  INFO 17696 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9998 (http) with context path ''
2019-07-10 11:10:33.991  INFO 17696 --- [           main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 9998

服务注册

2019-07-10 11:10:35.860  INFO 17696 --- [nio-9998-exec-3] com.web.event.EurekaStateListener        : 服务PRODUCTACLIENT192.168.1.83  192.168.1.83  8031进行注册
2019-07-10 11:10:35.875  INFO 17696 --- [nio-9998-exec-3] c.n.e.registry.AbstractInstanceRegistry  : Registered instance PRODUCTACLIENT/192.168.1.83:8031 with status UP (replication=true)
2019-07-10 11:10:35.876  INFO 17696 --- [nio-9998-exec-3] com.web.event.EurekaStateListener        : 服务PRODUCTACLIENT192.168.1.83  192.168.1.83  8030进行注册
2019-07-10 11:10:35.876  INFO 17696 --- [nio-9998-exec-3] c.n.e.registry.AbstractInstanceRegistry  : Registered instance PRODUCTACLIENT/192.168.1.83:8030 with status UP (replication=true)
2019-07-10 11:10:36.389  INFO 17696 --- [nio-9998-exec-4] com.web.event.EurekaStateListener        : 服务PRODUCTACLIENT192.168.1.83  192.168.1.83  8031进行注册
2019-07-10 11:10:36.389  INFO 17696 --- [nio-9998-exec-4] c.n.e.registry.AbstractInstanceRegistry  : Registered instance PRODUCTACLIENT/192.168.1.83:8031 with status UP (replication=true)
2019-07-10 11:10:36.390  INFO 17696 --- [nio-9998-exec-4] com.web.event.EurekaStateListener        : 服务192.168.1.83:8030  PRODUCTACLIENT进行续约
2019-07-10 11:10:36.391  INFO 17696 --- [nio-9998-exec-4] com.web.event.EurekaStateListener        : 服务192.168.1.83:8031  PRODUCTACLIENT进行续约
2019-07-10 11:10:37.407  INFO 17696 --- [nio-9998-exec-5] com.web.event.EurekaStateListener        : 服务192.168.1.83:8030  PRODUCTACLIENT进行续约
2019-07-10 11:10:37.408  INFO 17696 --- [nio-9998-exec-5] com.web.event.EurekaStateListener        : 服务192.168.1.83:8031  PRODUCTACLIENT进行续约
2019-07-10 11:10:38.415  INFO 17696 --- [nio-9998-exec-6] com.web.event.EurekaStateListener        : 服务192.168.1.83:8030  PRODUCTACLIENT进行续约
2019-07-10 11:10:38.416  INFO 17696 --- [nio-9998-exec-6] com.web.event.EurekaStateListener        : 服务192.168.1.83:8031  PRODUCTACLIENT进行续约
2019-07-10 11:10:38.967  INFO 17696 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms

停止8082端口的服务

2018-07-24 09:41:59.599  INFO 16524 --- [a-EvictionTimer] com.lh.event.EurekaStateListener         : 服务MEMBER已下线
2018-07-24 09:41:59.600  INFO 16524 --- [a-EvictionTimer] com.lh.event.EurekaStateListener         : server地址信息DESKTOP-SHDQ5I0:member:8082
2018-07-24 09:41:59.601  INFO 16524 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Cancelled instance MEMBER/DESKTOP-SHDQ5I0:member:8082 (replication=false)
posted @ 2019-07-10 11:43 憨憨青年 阅读(2562) 评论(0) 推荐(0) 编辑
摘要: 一.Linux以及Windows系统的优缺点对比 二.Linux以及Windows系统的区别 2.1 Linux的速度快,安全性比Windows好。 2.2 很多软件只能在Windows中运行,与Linux兼容的软件还在开发中。 2.3 Linux的操作复杂,相比而言Windows操作简单的多。 2 阅读全文
posted @ 2019-01-24 10:44 憨憨青年 阅读(4912) 评论(2) 推荐(1) 编辑
摘要: Flink CDC (Change Data Capture) SQL 用于实现数据库的数据变更捕获,并通过 SQL 接口进行处理。以下是一个基本的示例,全量+增量数据mysql同步到clickhouse,展示如何使用 Flink CDC SQL 进行数据同步。 首先,确保你有 Flink 和 Fl 阅读全文
posted @ 2024-07-01 18:23 憨憨青年 阅读(590) 评论(0) 推荐(0) 编辑
摘要: 简介: 异步调用几乎是处理高并发Web应用性能问题的万金油,那么什么是“异步调用”?“异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序。 是什么? 异步调用 阅读全文
posted @ 2022-09-23 10:21 憨憨青年 阅读(102) 评论(0) 推荐(0) 编辑
摘要: ##一.导入别人的项目他用了一个gexin死活没法下载尝试了各种国内外镜像无法下载 网上找了几种方法,这里进行记载,最终把问题解决 ###方式一: 修改一下本地maven的settings.xml配置的镜像 <mirror> <id>nexus-aliyun</id> <mirrorOf>*,!ge 阅读全文
posted @ 2022-05-06 11:55 憨憨青年 阅读(594) 评论(0) 推荐(0) 编辑
摘要: 1.添加依赖 dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>7.1.0</version> </dependency> 2.SpringBoot 的application.yml配置 # 阅读全文
posted @ 2022-04-25 17:04 憨憨青年 阅读(386) 评论(0) 推荐(0) 编辑
摘要: 一、获取镜像 docker pull minio/minio 二、构建容器 创建目录:一个用来存放配置,一个用来存储上传文件的目录。 mkdir -p /data/minio/config mkdir -p /data/minio/data 创建并启动minIO容器: 这里的 \ 指的是命令还没有输 阅读全文
posted @ 2022-04-25 16:47 憨憨青年 阅读(876) 评论(0) 推荐(0) 编辑
摘要: 一.docker准备工作 1、Linux服务器一台,且上面的安装的Centos系统内核要不低于3.10。你可以通过uname -r来查询当前内核版本。 2、清除系统残余项(如果你的服务器之前没有装过Docker,可以直接跳过)输入命令: sudo yum remove docker \ docker 阅读全文
posted @ 2022-04-24 16:43 憨憨青年 阅读(889) 评论(0) 推荐(0) 编辑
摘要: 在开发业务中,经常需要服务器与客户端的消息交互,有的业务需要等待服务器处理并且实时看到处理进度,即看到服务器的处理进度,本文以spring boot来讲解,其他的语言也可以类推。 1.实现思路: ​ 当浏览器发送请求时,与服务器建立http GET连接,此时保持连接不断开,服务器就可以主动发送消息给 阅读全文
posted @ 2022-04-09 10:55 憨憨青年 阅读(880) 评论(0) 推荐(0) 编辑
摘要: 在Web项目中,难免需要导出Excel这样的功能,后端接口怎么实现呢,Controller代码在下面,复制到项目的Controller中即可使用: 一,首先加入Excel的依赖,本例中我们用apache的poi: <dependency> <groupId>org.apache.poi</group 阅读全文
posted @ 2021-11-23 11:53 憨憨青年 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 1.下载地址 https://downloads.mysql.com/archives/community/ 2.安装包解压到自己Mysql目录下 本人路径:D:\mysqlSpace\mysql-8.0.26-winx64 3.新建my.ini文件并添加以下内容 点击查看代码 [mysqld] # 阅读全文
posted @ 2021-10-25 17:00 憨憨青年 阅读(1653) 评论(0) 推荐(0) 编辑
摘要: 1. 在idea官网下载插件的zip压缩包,上链接 https://plugins.jetbrains.com/ 2. 在搜索框搜索你要安装的插件以mybatisX,搜到后点进去 3. 点击get 4. 进入下面页面找到合适版本点进去 5. 点击download下载zip 6. (下载好后)打开id 阅读全文
posted @ 2021-10-12 13:58 憨憨青年 阅读(4017) 评论(0) 推荐(1) 编辑
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css
点击右上角即可分享
微信分享提示