编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

基于Spring Cloud的几个自研微服务组件

wxchong 2024-07-05 01:43:30 开源技术 15 ℃ 0 评论

一.应用管理中心

采用微服务架构以后,把原先单一的节点拆解成了多个微服务节点。公司虽然有一键发布平台,但是是针对每一个节点采取单独的发布,启动,停止操作,没有全局化统一管理功能。上线运维的工作量就变的非常庞大,因此我们开发了基于springcloud的应用管理中心来方便我们的工作。

1.1 实现机制

  • 每个微服务启动时,将自身的进程ID,当前路径,JDK路径,jar名称,系统用户,IP地址,端口号注册到zookeeper;

  • 应用管理中心从zookeeper中查询到所有的微服务进程信息;

  • 获取信息后构造启动命令,停止命令;

  • 在数据库保存系统的用户名和密码;

  • 在部署时指定git地址,分支,IP等调用jenkins,编译生成最新jar包拷贝到目标服务器指定位置;

  • 通过远程jsch远程执行shell命令对微服务进程进行操作。

1.2 功能原理

Java

1.3 效果图

Java

Java

Java

二.微服务健康检测中心

基于actuator我们可以很好的针对每个微服务节点进行监控,当出现问题时及时报警。

2.1 实现机制

  • 保证所有的微服务节点都加载了actuator;

  • 从eureka中获取所有的微服务注册信息;

  • 定时任务轮询请求每个微服务的health信息;

  • Health返回status树壮结构信息;

  • 如果status状态为down发送报警并包含health完整信息。

2.2 功能原理

Java

2.3 效果图

我们在健康检测中心中同时加载了spring boot admin,可以随时查看微服务节点的所有运行信息。

Java

2.4 部分源码

Java

Java

三.定时任务管理中心

我们需要建立定时任务全局视图,并希望对每一个定时任务具备启停的能力。我们采用了通过继承统一的AbstractScheduledTask,暴露定时任务的启动,停止接口。让每一个定时任务自动具备的启停功能。

3.1 实现机制

  • 通过BeanPostProcessor在bean初始完成后拦截所有的@Scheduled注解,获取ip,port,applicationName,className,beanName,scheduled等信息注册到zookeeper;

  • 定时任务实现继承AbstractScheduledTaskInter接口,暴露startScheduledTask和stopScheduledTask,可以针对定时任务进行启动停止;

  • 实现基准TaskScheduledController类,通过beanName获取定时任务类,调用该类的启动停止方法;

  • 定时任务管理中心查询zookeeper展示全局注册的定时任务,提供启动停止操作对定时任务进行控制;

  • 定时任务分为全局唯一定时任务和非唯一定时任务。

3.2 功能原理

Java

3.3 效果图

Java

Java

3.4 部分源码

  • 获取定时任务

  • AbstractScheduledTask

Java

  • 具备启停能力

Java

四.全局热备锁

无论定时任务还是普通跑批任务,我们需要对这些任务实现热备,以便在单点故障时任务依然可以顺利的执行。

4.1 实现机制

  • 全局热备锁包括普通任务(例如监听rabbitmq消息)和定时任务;

  • 任务以applicationName和className标识唯一,任务启动时把相关信息注册到zookeeper;

  • 其他节点的任务启动时发现已经有任务运行,则监听zookeeper;

  • 运行任务停止后,其它节点根据监听状态启动自身任务;

  • 定时任务和普通任务不同,定时任务需要注册非运行节点,并对子节点数目变化和子节点数据变化都做监听。

4.2 功能原理

Java

4.3 效果图

Java

4.4 部分源码

Java

Java

Java学习资料获取(复制下段连接至浏览器即可)

data:text/html;charset=UTF-8;base64,5oGt5Zac5L2g77yM5p625p6E5biI5a2m5Lmg576k5Y+35pivNjg2NTc5MDE0Cg==

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表