java - ESB/消息队列快速入门

标签 java architecture message-queue esb

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

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

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

  1. 消息队列
  2. ESB
  3. Protobuf

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

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

我的问题是:

  1. 为了实现上述功能,还有哪些其他好的选择(协议(protocol)、架构、现有库)需要考虑?
  2. 为了实现上述目标,我尝试查看 ServiceMixESB User Guide但似乎为了让上面的东西运行起来,我必须学习一堆我不熟悉的东西:JBI、NMR、Karaf、Camel 等,但我没有时间去做。所以,我想知道:ESB/消息队列“Hello World”应用程序是否有任何快速入门指南或 java 示例代码可以帮助启动一切?

最佳答案

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

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

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

ActiveMQ 只是一个 JMS 提供程序,我相信您已经看过这个示例:

Hello World ActiveMQ

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

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

在QPID中,使用一个简单的参数auto-delete=true,当没有 Activity 监听器时,队列将被删除,我不知道ActiveMQ中是如何处理的,但应该有办法。

只是我的0.02美元

关于java - ESB/消息队列快速入门,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16054024/

相关文章:

java - 使用附加类路径选项调用 "java -jar MyFile.jar"

ios - iOS中从中央服务器查询大量数据的建议

javascript - 设计和构建多角色 ReactJS 应用程序

c - mq_timedsend() 返回错误 14 "bad address"

c# - .net 消息队列

java - Glassfish 4 - 无法登录管理控制台

java - 有时必须等待很长时间,直到 HttpClient.execute() 抛出异常

java - Eclipse 2018-09 不会编译 Java 11 源代码;认为低于1.7

javascript - 多页面 Angular 应用程序的架构

jquery - jGrowl:如何将我的界面一次限制为一条消息?