问题 普通队列与SEDA队列


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

这个页面对我来说没有多大意义,所以我做了几个在线搜索“SEDA队列”一词,并得到了wikipedia文章 这里

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

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

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


1997
2018-02-06 14:14


起源

SEDA意味着一个线程附加到队列,就像ExecutorService(一个队列和一个线程池)或许这就是它的含义。 - Peter Lawrey
我不知道自问这个问题以来文档是否已更新,但它基本上说在第一行:“seda:组件提供异步SEDA行为,以便在BlockingQueue上交换消息并调用消费者 在一个单独的线程中 来自制片人。“ - DavidS


答案:


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


6
2018-02-06 14:18





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

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

SEDA模式最适合处理InOnly消息,其中一个路由完成处理并且切换到另一个路由以处理下一个阶段。当消息交换模式为InOut时,可以通过调用来询问seda:endpoint的响应

参考。 Apache Camel Developer的Cookbook


5
2017-09-14 05:38





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


1