普通队列与 SEDA 队列

2022-09-03 06:23:42

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

这个页面对我来说没有多大意义,所以我在网上搜索了几个术语“SEDA队列”,并在这里得到了维基百科的文章。

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

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

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


答案 1

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

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

SEDA 模式最适合处理消息,其中一个路由完成处理并移交给另一个路由来处理下一阶段。当消息交换模式为 时,可以通过调用终结点来请求来自终结点的响应。InOnlyseda:InOut

参考:Apache Camel Developer's Cookbook


答案 2

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


推荐