java - RabbitMQ 与应用程序解耦

标签 java perl rabbitmq message-queue mom

我需要设置 RabbitMQ 来尝试使用异步消息传递重新设计我们的架构。

现有申请流程:

  • JEE Web 应用程序(通过浏览器)创建一个新线程。
  • 该线程创建一个新的操作系统进程来调用 Perl 脚本来进行一些处理。
  • Perl 脚本将其输出写入文件,然后控制权返回到线程。
  • 然后该线程读取输出文件并将结果加载到数据库中。
  • 控制权传递给 servlet,servlet 将结果显示到 UI。

所有这些都是同步且耗时的,我们需要将其转换为异步消息通信。

现在,我计划将其分解为以下不同的组件,但不确定这是否适用于 RabbitMQ:

应用程序分割:

  • JEE Web 应用程序,它是 RabbitMQ 的生产者
  • 将 Perl 脚本分离到其自己的支持 RabbitMQ 通信的应用程序中。这个 Perl 客户端将使用该消息,对其进行处理,并将新消息放入 RabbitMQ 中以供下一步
  • 将数据库加载器的输出文件分离到其自己的支持 RabbitMQ 通信的 Java 应用程序中。这将消耗与上一步中 Perl 客户端消息相对应的队列中的消息。

这样,输出将在数据库中可用,并且异步流程将完成。

  1. 这种方式分离应用程序是否可以与 RabbitMQ 兼容?
  2. 有更好的方法吗?
  3. 请推荐一些 RabbitMQ 和 Perl 的框架组件

感谢您的意见。

最佳答案

是的,你可以这样做。如果这不是一项艰苦的工作,我会将数据库负载包括在 Perl 步骤中。这可能避免处理中间文件,但我不知道这对您的项目是否是可行的任务。

为了使用 RabbitMQ,我向您推荐 AnyEvent::RabbitMQ CPAN 模块。正如文档所述,您可以使用 AnyEvent::RabbitMQ 来:

  • 声明和删除交换
  • 声明、删除、绑定(bind)和取消绑定(bind)队列
  • 设置 QoS 并确认模式
  • 发布、使用、获取、确认、恢复和拒绝消息
  • 选择、提交和回滚事务

关于java - RabbitMQ 与应用程序解耦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39299381/

相关文章:

regex - 正则表达式安全性

spring-boot - 通过 ConfigurationProperties 的 RabbitListener 注释队列名称

java - 谷歌 App 引擎错误 : No matching index found. (Java)

java - 如何修复 "JAR will be empty - no content was marked for inclusion!"maven-jar-plugin?

java - 从php中获取json数据并将其存储在java中的数组中

node.js - 使用 amqplib npm 模块的 RabbitMQ 中的连接被拒绝错误

带有 spring amqp 的 rabbitmq - 出现 AmqpException 时消息卡住

java - 如何从 JAX-WS 客户端获取 XML 响应正文?

perl - 这个 CPAN 错误是什么意思?

perl - Perl 中的 CHECK、UNITCHECK 和 INIT block 有什么用处?