SpringBootAdmin自定义监控消息推送

简介: SpringBootAdmin自定义监控消息推送

一、发送方式

本地可以通过配置发邮件,但阿里云服务器中25端口被禁用,自带邮件功能无法发送,需要开放端口;
也可以自定义其他通知方式:微信或者短信通知

二、创建boot项目

pom.xml

<properties>
    <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
</dependencies>
</dependencyManagement>


<dependencies>
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
    <version>2.0.3</version>
</dependency>


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


<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>

application.yml配置

server:
  port: 6095
#给谁发送短信
smsmsg:
          # 经理        xx        xx       xx      xx  多个逗号隔开
#  phones: xxx,xxx,xxxx,xxxx,xxxx
  phones: 1555555xxxx

# 访问安全配置
security:
  user:
    name: admin
    password: 123456
  basic:
    enabled: false

spring:
  application:
    name: boot-admin
# 注册到注册中心
eureka:
  instance:
    lease-renewal-interval-in-seconds: 10     
    lease-expiration-duration-in-seconds: 30   
    hostname: 127.0.0.1
    instance-id: ${spring.application.name}:${eureka.instance.hostname}:${server.port}
    prefer-ip-address: true
    ip-address: ${eureka.instance.hostname}    
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      defaultZone: http://admin:123456@${eureka.instance.hostname}:6001/eureka/

三、配置类

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
   
    @Override
    protected void configure(HttpSecurity http) throws Exception {
   
        // Page with login form is served as /login.html and does a POST on /login
        http.formLogin().loginPage("/login.html").loginProcessingUrl("/login").permitAll();
        // The UI does a POST on /logout on logout
        http.logout().logoutUrl("/logout");
        // The ui currently doesn't support csrf
        http.csrf().disable();


        // Requests for the login page and the static assets are allowed
        http.authorizeRequests()
                .antMatchers("/login.html", "/**/*.css", "/img/**", "/third-party/**")
                .permitAll();
        // ... and any other request needs to be authorized
        http.authorizeRequests().antMatchers("/**").authenticated();


        // Enable so that the clients can authenticate via HTTP basic for registering
        http.httpBasic();
    }
}

四、自定义通知类

@Service
public class CustomNotifier extends AbstractStatusChangeNotifier {
   
    private final Logger log = LoggerFactory.getLogger(this.getClass());

    @Value("#{'${smsmsg.phones}'.split(',')}")
    private List<String> phones;

    @Resource
    private SendMsgUtil sendMsgUtil;


    @Override
    protected void doNotify(ClientApplicationEvent event) throws Exception {
   
        if (event instanceof ClientApplicationStatusChangedEvent) {
   
            ClientApplicationStatusChangedEvent statusChange = (ClientApplicationStatusChangedEvent) event;
            // down表示服务里部分中间件有问题
            // offline表示服务无法http访问了
            //if ((statusChange.getTo().isOffline() || statusChange.getTo().isDown()) && !statusChange.getFrom().isUnknown()) {
   
            if (statusChange.getTo().isOffline() && !statusChange.getFrom().isUnknown()) {
   
                DateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Application application = event.getApplication();
                // 服务名称
                String appName = application.getName();
                // 实例名称(在eureka中注册的唯一id)
                String instance = application.getId();
                // 事件发生的时间
                String time = sf.format(new Date(event.getTimestamp()));
                // 服务器的ip
                URL url = new URL(statusChange.getApplication().getServiceUrl());
                String server = url.getHost();


                // 封装成自定义事件对象
                JsonObject json = new JsonObject();
                json.addProperty("appName", appName.concat(":").concat(instance));
                json.addProperty("server", server);
                json.addProperty("from", statusChange.getFrom().getStatus());
                json.addProperty("to", statusChange.getTo().getStatus());
                json.addProperty("time", time);
                // 事件的全部信息
                json.addProperty("details", new Gson().toJson(event));
                log.warn("-----------------------------warn event !!!!,content is:{}", json.toString());
                //发送消息
                String msg = "自定义模板";
                log.info(environment);
                for(String phone : phones){
   
                    // 自定义消息发送
                    sendMsgUtil.sendSms(phone,msg);
                }
            }
        }
    }


    @Override
    protected boolean shouldNotify(ClientApplicationEvent event) {
   
        return super.shouldNotify(event);
    }
}
相关文章
|
6月前
|
监控 JavaScript API
局域网监控软件的实时通知系统:利用Node.js和WebSocket实现即时消息推送
本文介绍了如何使用Node.js和WebSocket构建局域网监控软件的实时通知系统。实时通知对于网络安全和家庭监控至关重要,能即时发送监控数据变化的通知,提高响应速度。通过Node.js创建WebSocket服务器,当数据变化时,监控软件发送消息至服务器,服务器随即推送给客户端。此外,还展示了如何利用Node.js编写API,自动将监控数据提交到网站,便于用户查看历史记录,从而提升监控体验。
182 3
|
6月前
|
监控 架构师 Java
得物从零构建亿级消息推送系统的送达稳定性监控体系技术实践
本文分享的是得物针对现有的消息推送系统的消息送达耗时、实时性、稳定性等方面问题,从零到一构建完整的消息推送质量监控体系和机制的技术实践。
130 1
|
消息中间件 监控 NoSQL
一个支持消息推送,文件管理,在线用户监控的后台权限管理系统来了
一个支持消息推送,文件管理,在线用户监控的后台权限管理系统来了
125 0
|
监控 前端开发
bootstrap 组件之 进度条 滚动监控 旋转加载 消息推送框 组件学习总结
bootstrap 组件之 进度条 滚动监控 旋转加载 消息推送框 组件学习总结
|
iOS开发
IOS消息推送
IOS消息推送
136 0
|
JSON 数据格式 iOS开发
APNS IOS 消息推送JSON格式介绍
在开发向苹果Apns推送消息服务功能,我们需要根据Apns接受的数据格式进行推送。下面积累了我在进行apns推送时候总结的 apns服务接受的Json数据格式 示例 1: 以下负载包含哦一个简单的 aps 字典。
3461 0
|
Android开发 iOS开发
了解iOS消息推送一文就够:史上最全iOS Push技术详解
本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表。 1、引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ、微信等IM界面处于前台时,聊天消息和指令都会通过IM自建的网络长连接通道推送过来,这种Pu...
3448 0
|
搜索推荐 iOS开发
iOS小技能:消息推送扩展的使用
iOS小技能:消息推送扩展的使用
552 0
iOS小技能:消息推送扩展的使用
|
PHP 数据安全/隐私保护 iOS开发
分分钟搞定IOS远程消息推送(二)
分分钟搞定IOS远程消息推送
409 0
分分钟搞定IOS远程消息推送(二)
|
存储 Android开发 数据安全/隐私保护
分分钟搞定IOS远程消息推送(一)
分分钟搞定IOS远程消息推送
246 0
分分钟搞定IOS远程消息推送(一)
下一篇
无影云桌面