在JEE应用程序中,需要摆脱支持工作流程执行的众多JMS队列。工作流通常由多个顺序任务组成。任务可能包含外部系统调用和其他业务逻辑。任务处理器实现为MDB。当任务处理器从输入队列接收消息时,它执行业务逻辑,丰富输入消息并将其放入工作流链中下一个任务处理器的输入队列。如果任务处理器根据设置执行任务,则输入消息将在队列中回滚以延迟执行,或者放入错误队列中。 现在,应该使用数据库而不是JMS队列。任务应该作为数据库表中的行保存,包括任务状态(延迟,正在进行,失败等),目标(应该执行任务的处理器的名称/别名)以及业务数据。
我已经开始使用JCA实现此要求。我的入站连接器扫描数据库表中的任务,然后调用适当的端点(实现业务接口的MDB)。
还有其他方法可以满足要求吗?也许有人知道这种场景的轻量级开源框架?请不要提及BPM框架。
答案 0 :(得分:1)
我认为你想要摆脱JMS,因为在很多队列中管理很多消息并不像#34;轻量级"如你所愿......并且你的代码库正在增长!
虽然您的JMS解决方案已经实现了它们,但新解决方案还需要考虑更多的非功能性要求:可扩展性,可靠性等。总而言之,这些都是艰难的要求...... 任何技术。
也许你可以考虑不同的领域"轻量级"对你来说最重要的是:
该领域有许多解决方案,但它们都不是针对所有问题的一站式开箱即用解决方案。一些是面向批处理的(如Spring Batch或Java Batch),另一些是面向消息的(如Akka或Hystrix)。比较它们本身就是一门科学。它们有很多力量或者反复使用它们,你在这里得不到完美的答案,即使你提供了很多细节,比如峰值工作数,步数,外部系统调用次数等等。我一次又一次地看到它:如果您确切了解业务工作流程,那么可以更轻松地更换技术......这是一个先决条件。
然后我建议您使用不同的解决方案(如果您有时间),或者留在原地......它可能不是所有可能解决方案中最糟糕的解决方案。不要......而且我的意思是: Don&#t> 实施另一个"轻量级"你可以打赌的东西,赢得了非常轻巧的#34;比你想象的要快得多。
最后一件事:我与传统的BPM框架分享您的感受,即BPEL和朋友。但是像Camunda BPM这样的轻量级和开源框架值得一看。