1. 项目背景
朋友在一家日企,运维工具老旧,希望增加一款系统告警工具。我提议通过 微信企业号 (改版为 企业微信 )或者短信推送告警信息。提出两点要求:
- 可以群发给企业微信中的多个人
- 监测健康检测服务是否存活(绕嘴。。)
做了第一版demo,定位为通信渠道的http代理。贴出企业微信相关代码,如果有需要的同学可以拿去用,记得点个star就好。
1.1 依赖项目
因为定位为http代理,并未使用数据库及 持久化 工具。
- springboot
- 企业微信接口
- 可能是目前最好最全的微信Java开发工具包(SDK)
- swagger 工具
2. 项目code
代理入口为健康检测工具,出口为企业微信、短信等。同时需要保障和健康检测工具之间的网络通畅。
最近在尝试画图
2.1 微信接口
企业微信相关配置如下
- corpid 企业ID
- agentid 应用ID,在企业微信管理后台创建应用后,可以查看应用ID
- corp.secret 应用的凭证密钥
weixin-java-tools已经对微信接口进行了友好的封装,可以通过标签、部门等分组,查询用户标识。配置 bean 方法如下
同时也提供了发送消息、已经封装消息的类
2.2 restful 接口
对外暴露的接口主要提供两个功能
- 代理企业微信,用于查询部门、标签、userId等
- 发送告警信息
具体实现在service中,restful暴露了http请求接口及swagger接口。并且将首页指向了swagger页面
2.3 验权
两种验权方式
- 参数+secret通过 SHA 加密签名
- ip 白名单
通过interceptor实现
2.3.1 白名单校验
2.3.2 接口参数签名校验
SHA加密工具封装
如果需要对sign有效期进行校验,需要提供获取服务器时钟的方法,避免因为服务器时间不一致导致的时间差, 此方法可以通过@Anonymous去掉验权操作。
2.4 健康检测
定时用http get 请求确认网络通畅,如果网络连接失败次数超过阈值,报警给 系统管理员
通过Scheduled编写定时任务
在配置bean中需要注入bean并允许启动调度
3. 其他
项目写的比较仓促,后续根据实际使用场景进行调整优化。都是站在巨人的肩膀上,利用现成的工具进行拼装。 如果有建议或者希望实现哪些功能,可以留言或者给我提 issue