1

我需要实现一个演示系统来证明概念。基本上,系统描述可以简化为 2 个模块:

  1. 模块 1 发送请求
  2. 模块 2 接收它们、处理并发送回响应

(注意:模块位于同一个 Intranet 中,所以我可能希望协议比 http 更快。我想到了以下选项:

  1. 消息队列
  2. ESB
  3. 原型缓冲区

理想情况下,系统将(但不限于)基于 java,在 Linux RH 上运行并能够线性扩展。但是,性能超出了 POC 的范围。我在看ServiceMixActiveMQ。我的想法是在java论文模块中实现。该架构将是消息驱动的。模块将通过消息队列或服务总线进行通信。

“消费者”将请求作为消息发送到消息队列,“生产者”通过特定订阅主题提取它们,处理请求并将响应发布回同一队列。订阅“响应”主题的“消费者”从队列中挑选结果。结尾。

我的问题是:

  1. 为了实现上述功能,还有哪些其他好的选择(协议、架构、现有库)?
  2. 为了实现上述目标,我尝试查看ServiceMixESB 用户指南,但似乎为了获得类似上面运行的内容,我必须学习一些我不熟悉的东西:JBI、NMR、Karaf、Camel 等,我确实这样做了没有时间去做。所以,我想知道:是否有任何 ESB/Message Queue 'Hello World' 应用程序的快速入门指南或 java 示例代码可以帮助启动一切?
4

1 回答 1

1

带有 XML 消息的 ActiveMQ 应该就足够了,除非你的消息很大而且很多,在这种情况下我会选择 protobuf(免责声明:我在上一个项目中使用过它们)。

事实上,我可能会选择一些 amqp 实现,比如通过 ActiveMQ 实现的 Apache Qpid(免责声明:前段时间也使用过)。但这更多是个人原因。

protobuf 的缺点是你需要一些关于它们的知识,网络上到处都是你好世界,但是一旦你尝试面对“真正的问题”,它就变得不太容易了。您还需要一个 Maven 插件来构建和编译文件,除非您想手动进行。

ActiveMQ 只是一个 JMS 提供者,我相信您已经看过以下示例:

你好世界 ActiveMQ

在实现方面,当 module1 发送请求时,您希望确保响应将被同一模块读取。我建议临时排队。将请求发送到某个队列(以及临时队列名称,例如预期响应的队列);module2 处理消息并将响应发送到临时队列,由 module1 使用消息侦听器读取。

现在,您必须非常快速地删除这些临时队列,以免堆积,并检查 ActiveMQ 是否为它们提供了唯一的名称。

在带有简单参数 auto-delete=true 的 QPID中,当没有活动的侦听器时,队列被删除,我不知道在 ActiveMQ 中是如何处理的,但应该有办法。

只是我的 0.02 美元

于 2013-04-17T07:47:25.203 回答