jms:队列与seda:在Apache Camel中

时间:2013-09-13 11:11:04

标签: apache-camel

我构建了重型线程应用程序,它从网络接收网页并执行HTML的深入处理。基本上我的所有线程都包含许多网络绑定操作和CPU绑定操作。我在不同的线程中运行它们(所以我实现了大多数IO / CPU利用率)。

由于有数百万个URL需要处理,我无法运行seda:coz和Camel 2.3一样,默认情况下它的大小是无限的,并且在一段时间内我的内存不足。我可以严格限制seda队列的大小,但我决定不这样做,而是使用JMS队列。

在相同数量的线程上,我看到使用jprofiler8的线程遥测的不同结果。 请检查区别:

enter image description here

有人能解释一下为什么我在使用seda时有更好的IO利用率:与jms比较的队列:1?

1 个答案:

答案 0 :(得分:6)

你的情景有点不清楚。

SEDA是一个将BlockingQueue的交换入队/出列的包装器。全部在内存中,在VM操作中。

JMS队列只是某些MOM服务器实现(Apache ActiveMQ,Apache Qpid或IBM WebSphere MQ等)的API抽象。但是,由于JMS队列是通过TCP / IP上的有线协议和事务一起构建的,因此持久性与复杂功能(如选择器)一起使用 - 运行时服务器资源上的特性当然与SEDA实现不同。具体如何以及为什么在很大程度上取决于您使用的各种选项和特定JMS产品以及许多其他难以预测的因素。

我建议你将Camel库更新到更高版本,在那里你可以控制SEDA队列大小并在生成时阻止生产者。