保持平衡:使用 Red Hat JBoss Fuse 负载平衡 Quartz Cron 作业

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

今年年初,我发布了一篇关于如何在 JBoss Fuse 中使用 Apache Camel 执行 cron 作业的帖子,我这样做的原因是有时我们需要卸载集成作业并安排它们在更短的时间内运行繁忙时间。 Cron Jobs 允许您在您设置的特定时间运行集成应用程序,它主要在夜间运行。我们使用 camel 中的 Quartz2 组件来实现这一点。

只是回顾一下我遇到的情况。基本上它会启动两个运行相同 cron 作业的实例,该作业只是将文件写入 FTP 服务器。该作业由 Quartz2 实现并设置为每分钟运行两次,两个实例都连接到数据库(在我的代码中我使用 H2 以便于安装,但还有另一个选项使用 PostgreSQL 数据库,请参阅我之前的博客)。我们想要将它们连接到数据库的原因是确保这两个实例将共享作业的加载。如果您有一个长时间运行的作业,这将非常有用,并且可以将它们分成不同的部分并在分布式资源之间共享负载。

不要忘记事先设置数据库,设置数据库表模式,下载 Quartz 库, 你会发现设置表的脚本在 docs/dbTables 下,找到你正在使用的数据库的 sql 文件。运行 sql 文件以创建数据库中所需的所有表。



让我们回到骆驼项目本身。数据库的设置在属性中。


 <bean id="quartz2" class="org.apache.camel.component.quartz2.QuartzComponent">
    <property name="propertiesFile" value="org/blogdemo/demojob/myquartz.properties"/>

</bean>

由于我们要用 fabric 部署它,我们将把属性文件放在 main/fabric

myquartz.properties 中包含有关共享数据库的详细信息,例如驱动程序、ID、密码以及设置详细信息,例如线程数、使用的 driverDelegateClass,最重要的是此设置是否是集群的。


 <bean id="quartz2" class="org.apache.camel.component.quartz2.QuartzComponent">
    <property name="propertiesFile" value="org/blogdemo/demojob/myquartz.properties"/>

</bean>

骆驼路线非常简单易行,


 <bean id="quartz2" class="org.apache.camel.component.quartz2.QuartzComponent">
    <property name="propertiesFile" value="org/blogdemo/demojob/myquartz.properties"/>

</bean>

基本上,它由 cron 作业踢出,每隔 0 秒和 45 秒,然后创建一个名为 MyJob-YYYYMMDDHHMMSS.txt 的文件,内容为 Hello This is the content from Quartz2 in the file。

为了将应用程序部署到 JBoss Fuse,我需要为连接池创建一个片段包,这里我们使用 c3p0 和 JDBC 驱动程序。然后将两者部署到同一个实例上。




部署另一个具有相同作业配置文件和片段包的容器。



添加另一个配置文件,打印在 FTP 服务器中接收到的内容。





如果您在部署时遇到任何问题,可能是 OSGi 没有正确加载 bundle,您可以简单地重启容器或确保以下 bundle 在容器中被激活。 (使用 osgi:list 检查)
[ 157] [活动] [ ] [ ] [ 80] Apache ServiceMix :: Bundles :: c3p0 (0.9.1.2_1),片段:148
[ 167] [活动] [ ] [ ] [ 80] H2 数据库引擎 (1.4.181)
[ 172] [活动] [已创建] [ ] [ 80] Quartz 两个演示 (1.0.0.SNAPSHOT)


查看运行quartzprint profile的日志,你会发现作业是集群的,负载在两个节点之间共享。




作业的详细信息也可以在每个容器的控制台中找到。



您可以 在此处找到演示代码和详细说明