普通队列与SEDA队列

时间:2012-02-06 14:14:23

标签: java queue messaging apache-camel

作为Apache Camel的新手,我最近正在审查其长长的组件列表,并偶然发现他们对SEDA queue组件的支持。

这个页面对我来说没有多大意义,所以我做了几个在线搜索“SEDA队列”一词,并获得了维基百科文章here

阅读那篇文章后,我无法分辨出SEDA队列与普通“普通”队列之间的区别!两者都通过使用异步队列来接受解耦系统的概念。

从文章中,“SEDA”听起来就像一个架构,包括在每个组件之间放置一个队列。这是对的吗?

但如果它只是一个架构,那么为什么“SEDA”队列是一个特殊的Apache Camel组件?

3 个答案:

答案 0 :(得分:6)

SEDA队列就像一个普通的队列(如上所述,在Camel中,他们有一个与它们相关联的线程池作为组件的一部分)。 SEDA是一种建筑。 Camel中的SEDA组件在进程中使用内存中队列,并且是一个单独的组件,以便将它们与Apache camel中的其他队列组件区分开来,即JMS组件。

答案 1 :(得分:5)

SEDA是一个缩写,代表分阶段事件驱动架构,它被设计为一种机制来调节消息处理的不同阶段之间的流程。我们的想法是消除整个进程中消息输出的频率,使其与输入匹配。它允许enpoint的消费者线程将长时间运行的操作的工作卸载到后台,从而释放它们以消耗消息从运输。 将交换传递到seda:端点时,会将其放入BlockingQueue。该列表存在于Camel上下文中,这意味着只有那些在同一上下文中的路由才能被这种类型的端点连接起来。默认情况下,队列是无限制的,但可以通过在使用者的URI上设置size属性来更改。

默认情况下,分配给端点的单个线程会读取列表中的交换并通过路由处理它们。如程序示例所示,可以增加concurrenctConsumers的数量,以确保及时从该列表中处理交换。

SEDA模式最适合处理InOnly消息,其中一条路线完成处理并交给另一条路线处理下一阶段。当消息交换模式为seda:时,可以通过调用InOut端点来请求响应。

参考: Apache Camel Developer's Cookbook

答案 2 :(得分:1)

SEDA提供单个驼峰路线内的组件解耦。或者在一个过程中就此而言。 。这意味着它可以帮助您对其他组件进行异步调用...它是一个内存阻塞队列。 另一方面,JMS用于整个系统的解耦.JMS将涉及一个外部代理.SEDA将只从消费者组件创建一个单独的线程