我需要实现一个演示系统来验证概念。 基本上,系统描述可以缩减为2个模块:
- 模块 1 发送请求
- 模块 2 接收它们、处理并将响应发回
(注意:这些模块位于同一个 Intranet 中,因此我可能希望该协议(protocol)比 http 更快。 我想到了以下选项:
- 消息队列
- ESB
- Protobuf
理想情况下,系统应该是(但不限于)基于java的,在Linux RH上运行并且能够线性扩展。但是,性能超出了POC的范围。 我在看ServiceMix和 ActiveMQ 。 我的想法是在 java 论文模块中实现。该架构将是消息驱动的。这些模块将通过消息队列或服务总线进行通信。
“消费者”将请求作为消息发送到消息队列,“生产者”通过特定的订阅主题拾取它们,处理请求并将响应发布回同一队列。订阅“响应”主题的“消费者”从队列中选取结果。结束。
我的问题是:
- 为了实现上述功能,还有哪些其他好的选择(协议(protocol)、架构、现有库)需要考虑?
- 为了实现上述目标,我尝试查看 ServiceMixESB User Guide但似乎为了让上面的东西运行起来,我必须学习一堆我不熟悉的东西:JBI、NMR、Karaf、Camel 等,但我没有时间去做。所以,我想知道:ESB/消息队列“Hello World”应用程序是否有任何快速入门指南或 java 示例代码可以帮助启动一切?
最佳答案
带有 XML 消息的 ActiveMQ 应该足够了,除非您的消息很大而且很多,在这种情况下我会选择 protobuf(免责声明:我在上一个项目中使用了它们)。
事实上,我可能会选择一些 amqp 实现,例如 Apache Qpid(免责声明:前段时间也使用过)而不是 ActiveMQ。但这更多是个人原因。
protobuf 的缺点是你需要一些关于它们的知识,网络上到处都是 hello world,但是一旦你尝试面对“真正的问题”,它就不会变得太容易。 您还需要一个 Maven 插件来构建和编译文件,除非您想手动执行。
ActiveMQ 只是一个 JMS 提供程序,我相信您已经看过这个示例:
在实现方面,当 module1 发送请求时,您希望确保同一模块将读取响应。我建议临时排队。将请求发送到某个队列(以及临时队列名称,例如预期响应到达的队列名称); module2 处理消息并将响应发送到临时队列,其中 module1 通过消息监听器读取响应。
现在,您必须非常快地删除这个临时队列,以免堆积起来,并检查 ActiveMQ 是否为它们提供了唯一的名称。
在QPID中,使用一个简单的参数auto-delete=true,当没有 Activity 监听器时,队列将被删除,我不知道ActiveMQ中是如何处理的,但应该有办法。
只是我的0.02美元
关于java - ESB/消息队列快速入门,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16054024/