替代JMS消息传递以在Torquebox中进行并发处理

时间:2013-02-22 13:07:23

标签: concurrency jms jruby message-queue torquebox

我有一个应用程序定期调用某些数据服务(使用扭矩盒调度程序),当有数据集时,它应分别处理每个“数据记录”。

我想同时处理这些记录以获得更好的性能,我首先想到的是设置jms队列(在盒子的扭矩盒中可用),这样预定的作业就会将所有接收到的数据放入队列和每条记录中将被拾取(对于连接的多个接收器之一)进行处理。

但是,在同一个应用程序的元素之间使用JMS队列是不是过度设计?你可以在这里建议任何其他方法吗?

2 个答案:

答案 0 :(得分:2)

JMS队列可能根本不是一个糟糕的解决方案,请尝试一下,看看它是如何工作的。当它们像Torquebox一样易于使用时,它不需要过度工程化。

如果您想要更少参与,我建议使用Java自己的BlockingQueueLinkedBlockingQueueArrayBlockingQueue,具体取决于具体用例。

这些只是常规集合,如数组或散列,因此您需要在某处创建它们并将它们传递到您希望能够从中发布和使用的组件。它们也没有像JMS队列那样的任何确认概念。

答案 1 :(得分:0)

如何使用Java消息传递队列(如您所述),因为HornetQ是JBoss / Torquebox的一部分,然后使用消息处理器来处理消息。您还可以在torquebox.rb(或.yml)中指定并发级别。

Your_Scheduled_Job - > / queues / my_queue - > TorqueBox::Messaging::MessageProcessor

在config / torquebox.rb文件中,您可以指定并发和名称消息处理器:

queue '/queues/my_queue' do
  processor MyMessageProcessor do
    concurrency 5
  end
end

消息传递处理器将同时处理队列中的消息,而无需任何其他步骤。

我还在尝试使用Torquebox和Ruby并发,而这些我现在正试图实现......