ESB / Message Queue快速启动

时间:2013-04-17 07:23:55

标签: java architecture message-queue esb

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

  1. 模块1发送请求
  2. 模块2选择它们,处理并发回响应
  3. 注意:模块位于同一个Intranet中,所以我可能希望协议比http更快。 我想到了以下几个选项:

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

      'consumer'将请求作为消息发送到消息队列,'producer'通过某个订阅主题选择它们,处理请求并将响应发送回同一队列。在“响应”主题上订阅的“消费者”从队列中选择结果。 END。

      我的问题是:

      1. 为了实现上述功能,还需要考虑哪些其他好的选项(协议,架构,现有库)?
      2. 为了达到上述目的,我试着看ServiceMixESB User Guide但似乎为了得到上面这样的东西,我得学习一些我不熟悉的东西:JBI,NMR,Karaf,骆驼等我没有时间去做。所以,我想知道:ESB / Message Queue的“Hello World”应用程序是否有任何快速入门指南或java示例代码可以帮助您设置所有动态?

1 个答案:

答案 0 :(得分:1)

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

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

protobuf的缺点是你需要一些关于它们的知识,网络上都有你好的世界,但是一旦你试图面对“真正的问题”,它就不会太容易了。 除非你想手动完成,否则你还需要一个maven插件来构建和编译文件。

ActiveMQ只是一个JMS提供者,我相信你已经看过这个例子了:

Hello World ActiveMQ

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

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

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

只是我的0.02美元