假设我有一个Job Scheduler,它有4个消费者A、B、C和D。类型X的作业必须路由到消费者A,类型Y的作业必须路由到消费者B,依此类推。使用者A、B、C和D将作为独立的应用程序运行,而不需要任何依赖,无论是本地还是远程。
使用者完成其作业所需的时间各不相同,这些作业随后被路由到Job Scheduler进行聚合。
可能还需要其中一个消费者的克隆来共享其合格的工作。但是,一个作业应该只处理一次。
基于内容的路由器是解决此问题的最佳解决方案吗?请注意,我需要自定义作业调度器,因为它只具有在使用者之间拆分作业的智能。
或者有没有更好的方法来处理这件事?我不需要代理的那些功能,比如自动切换到另一个使用者(负载平衡),以及在出现故障时这样的功能。
发布于 2012-12-30 01:23:06
我不能完全确定我是否理解你的意思。这听起来像是异步处理的一个相当简单的场景。
我不确定您计划如何将这些作业发送到Camel应用程序,但如果您可以在某个地方接收它们,那么您可能会使用一个简单的基于内容的路由器。
考虑到您对使用者的需求,我建议使用JMS队列(使用Apache或类似的代理中间件),每个作业类型一个队列。这使得将消费者分配到不同的机器上变得很容易,而不需要真正更改代码。
// Central node routes
from("xxx:routeJob")
.choice()
.when(header("type").isEqualTo("x"))
.to("jms:queue:processJobTypeX")
.when(header("type").isEqualTo("y"))
.to("jms:queue:processJobTypeY")
.otherwise()
.to("jms:queue:processJobTypeZ");
from("jms:queue:aggregateJob")
.bean(aggregate);
// different camel application (may be duplicated for multiple instances).
from("jms:queue:processJobTypeX")
.bean(heavyProcessing)
.to("jms:queue:aggregateJob");
// Yet another camel application
from("jms:queue:processJobTypeY")
.bean(lightProcessing)
.to("jms:queue:aggregateJob");请重新查看您的问题以获得更好的答案:)
https://stackoverflow.com/questions/14000861
复制相似问题