Spring cloudSpringBoot极简教程 · Spring Boot

基于Spring Cloud Eureka的Spring Boo

2019-01-18  本文已影响21人  moneyoverf1ow

1.服务端

·springboot配置

server.port=8081
\#服务名
spring.application.name=admin
\#注册中心
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka
eureka.instance.prefer-ip-address=true
eureka.instance.metadata-map.management.context-path=/actuator
eureka.client.healthcheck.enabled=true
eureka.instance.health-check-url-path=/actuator/health
eureka.instance.status-page-url-path=/actuator/info
eureka.instance.home-page-url-path=/
eureka.instance.lease-renewal-interval-in-seconds=5
eureka.client.registry-fetch-interval-seconds=5

\#暴露actuator的所有端点
management.endpoints.web.exposure.include=*
management.endpoint.logfile.external-file=${LOG_PATH}/@log.project@/system.log
\#health endpoint是否必须显示全部细节。默认情况下, /actuator/health 是公开的,并且不显示细节
management.endpoint.health.show-details=always

\#配置登录名,密码和安全策略
spring.profiles.active=secure
spring.security.user.name=admin
spring.security.user.password=password

spring.jmx.default-domain=admin

/#企业微信通知
qyweixin.access-token.url=https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s
qyweixin.send-message.url=https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s
qyweixin.agent-id=1000002
qyweixin.corp-id=wwea31e8b044
qyweixin.corp-secret=XzikoaSgmAS2nBNYciczWElBbHKyO-Qdg

simplecache.volume=10
simplecache.defaultExpireMillis=60000

·核心依赖

由于是基于eureka的监控,所以主要有两个依赖,一是eureka client,一是admin server。

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
        </dependency>

·看看依赖的包里面都有什么

主要看admin server这个依赖:

image

·依赖的作用

基于eureka的方式在spring-boot-admin-server-cloud这个包里。看看它的核心类:

image image

是一个listenter,用来监听spring容器中的eureka client产生的各种事件,主要还是心跳,每次心跳都会刷新自己的服务列表。spring在eureka client外封装了一层,重写了eureka client的onCacheRefreshed()方法,在其定时被调用时发布一个心跳事件,根据这个事件更新服务列表。

image

监控的各项指标,包括线程,内存等等,都是通过各个客户端的spring boot actuator暴露的endpoints来获取的。admin server有一个代理接口,监控轮询这个接口来获取相应的指标数据:

image

InstancesProxyController:

代理客户端actuator暴露的接口,流程就是:监控前端->proxyController->客户端/actuator/xxx

画了一个流程图帮助理解:

image

通过eureka client从服务中心拉取服务列表,在刷新缓存时发布一个心跳,listener监听心跳,从eureka client获取到最新的服务列表,更新自己的服务仓库。管理员监控时访问代理接口,接口中通过最新的实例信息,访问实例暴露的接口,获取实例当前的状态。

·可选依赖

        <!—JMX管理-->
        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-core</artifactId>
        </dependency>

·自定义通知:

admin提供了许多通知监控的服务当前状态方式,包括邮箱通知,opsgenie等等。也支持自定义通知,实现方式就是,继承AbstractEventNotifier,重写其doNotify方法:

我这里,注册了一个企业微信账号,绑定到微信实现了微信的通知。通过微信获知服务下线和内存使用率异常等信息。

2.客户端

客户端注册到eureka服务中心,即可被监控。

最后,参考代码和配置见administrator.git

上一篇下一篇

猜你喜欢

热点阅读