Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 普通队列与SEDA队列_Java_Queue_Messaging_Apache Camel - Fatal编程技术网

Java 普通队列与SEDA队列

Java 普通队列与SEDA队列,java,queue,messaging,apache-camel,Java,Queue,Messaging,Apache Camel,作为Apache Camel的新手,我最近查看了它的一长串组件,偶然发现了它们对组件的支持 这个页面对我来说没什么意义,所以我在网上搜索了两次“SEDA queue”这个词,得到了维基百科的文章 读完那篇文章后,我分不清SEDA队列和普通“普通”队列的区别!两者都采用了通过使用异步队列来解耦系统的概念 从文章中可以看出,“SEDA”听起来就像是一个架构,它包括在每个组件之间放置一个队列。这是正确的吗 但是如果它只是一个架构,那么为什么“SEDA”队列是一个特殊的apachecamel组件呢?SE

作为Apache Camel的新手,我最近查看了它的一长串组件,偶然发现了它们对组件的支持

这个页面对我来说没什么意义,所以我在网上搜索了两次“SEDA queue”这个词,得到了维基百科的文章

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

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


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

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

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

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

默认情况下,指定给端点的单个线程从列表中读取交换并通过路由进行处理。如正在处理的示例所示,可以增加
并发消费者的数量
,以确保及时从该列表中处理交换

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

参考:
Apache Camel Developer's Cookbook

SEDA意味着一个线程连接到队列,就像一个ExecutorService(队列和线程池),也许这就是它在这里的意思。我不知道文档是否在问到这个问题后进行了更新,但它基本上在第一行中说:“seda:组件提供异步seda行为,因此消息在BlockingQueue上交换,消费者在生产者的单独线程中调用。”