[英]ESB/Message Queue quick start
我需要实现一个演示系统以证明概念。 基本上,系统描述可以简化为2个模块:
( 注意:这些模块位于同一个Intranet中,因此我可能希望该协议比http更快。我想到了以下选项:
理想情况下,该系统将(但不仅限于)基于Java,可在Linux RH上运行并且能够线性扩展,但是性能超出了POC的范围。 我在看ServiceMix和ActiveMQ 。 我的想法是在Java这些模块中实现。 该架构将是消息驱动的。 模块将通过消息队列或服务总线进行通信。
“消费者”将请求作为消息发送到消息队列,“生产者”按特定的订阅主题进行选择,处理请求并将响应发回到同一队列。 在“响应”主题上订阅的“消费者”从队列中选择结果。 结束。
我的问题是:
带有XML消息的ActiveMQ应该足够了,除非您的消息很大且很多,在这种情况下,我会选择protobuf(免责声明:我在上一个项目中使用了它们)。
事实上,我可能会在ActiveMQ上进行一些amqp实现,例如Apache Qpid(免责声明:也在不久前使用过)。 但这更多是个人原因。
protobuf的缺点是您需要了解一些有关它们的知识,网络上遍布世界,但是一旦您尝试面对“真正的问题”,这并不太容易。 您还需要一个maven插件来构建和编译文件,除非您想手动执行。
ActiveMQ仅仅是JMS提供程序,我相信您已经看过以下示例:
在实现方面,当module1发送请求时,您要确保该响应将被同一模块读取。 我建议使用临时队列。 将请求发送到某个队列(还发送临时队列名称,例如预期响应将到达的临时队列名称); module2处理该消息并将响应发送到临时队列,模块1在其中使用消息侦听器读取该响应。
现在,您必须非常快地删除此临时队列,以免堆积,还要检查ActiveMQ是否为其提供了唯一的名称。
在带有简单参数auto-delete = true的QPID中 ,当没有活动的侦听器时,删除队列时,我不知道如何在ActiveMQ中进行处理,但是应该有一种方法。
我的0.02美元
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.