RabbitMQ 与应用程序解耦
RabbitMQ and Application Decoupling
我需要设置 RabbitMQ 以尝试使用异步消息重新设计我们的架构。
现有应用流程:
- JEE Web 应用程序(通过浏览器)创建了一个新线程。
- 此线程创建一个新的 OS 进程来调用 Perl 脚本来进行一些处理。
- Perl 脚本将其输出写入文件,然后控制权返回给线程。
- 线程然后读取输出文件并将结果加载到数据库。
- 控制传递给 servlet,后者将结果显示给 UI。
这些都是同步的,很耗时,我们需要将其转换为异步消息通信。
现在,我计划将其分解为以下不同的组件,但不确定这是否适用于 RabbitMQ:
应用细分:
- 作为 RabbitMQ 生产者的 JEE Web 应用程序
- 将 Perl 脚本分离到它自己的支持 RabbitMQ 通信的应用程序中。此 Perl 客户端将使用消息、处理它并在 RabbitMQ 中放置一条新消息用于下一步
- 将数据库加载程序的输出文件分离到它自己的 Java 支持 RabbitMQ 通信的应用程序中。这将使用与上一步中 Perl 客户端消息相对应的队列中的消息。
这样,输出将在数据库中可用,异步流程将完成。
- 是否可以通过这种方式分离与 RabbitMQ 兼容的应用程序?
- 有没有更好的方法来做到这一点?
- 请推荐一些适用于 RabbitMQ 和 Perl 的框架组件
感谢您对此的投入。
是的,你可以这样做。如果这不是一项艰巨的工作,我将在 Perl 步骤中包括数据库负载。这可能会避免处理中间文件,但我不知道这在您的项目中是否可行。
为了使用 RabbitMQ,我会向您推荐 AnyEvent::RabbitMQ CPAN 模块。如文档所述,您可以使用 AnyEvent::RabbitMQ 来:
- 声明和删除交易所
- 声明、删除、绑定和解除绑定队列
- 设置QoS和确认模式
- 发布、使用、获取、确认、恢复和拒绝消息
- Select,提交和回滚事务
我需要设置 RabbitMQ 以尝试使用异步消息重新设计我们的架构。
现有应用流程:
- JEE Web 应用程序(通过浏览器)创建了一个新线程。
- 此线程创建一个新的 OS 进程来调用 Perl 脚本来进行一些处理。
- Perl 脚本将其输出写入文件,然后控制权返回给线程。
- 线程然后读取输出文件并将结果加载到数据库。
- 控制传递给 servlet,后者将结果显示给 UI。
这些都是同步的,很耗时,我们需要将其转换为异步消息通信。
现在,我计划将其分解为以下不同的组件,但不确定这是否适用于 RabbitMQ:
应用细分:
- 作为 RabbitMQ 生产者的 JEE Web 应用程序
- 将 Perl 脚本分离到它自己的支持 RabbitMQ 通信的应用程序中。此 Perl 客户端将使用消息、处理它并在 RabbitMQ 中放置一条新消息用于下一步
- 将数据库加载程序的输出文件分离到它自己的 Java 支持 RabbitMQ 通信的应用程序中。这将使用与上一步中 Perl 客户端消息相对应的队列中的消息。
这样,输出将在数据库中可用,异步流程将完成。
- 是否可以通过这种方式分离与 RabbitMQ 兼容的应用程序?
- 有没有更好的方法来做到这一点?
- 请推荐一些适用于 RabbitMQ 和 Perl 的框架组件
感谢您对此的投入。
是的,你可以这样做。如果这不是一项艰巨的工作,我将在 Perl 步骤中包括数据库负载。这可能会避免处理中间文件,但我不知道这在您的项目中是否可行。
为了使用 RabbitMQ,我会向您推荐 AnyEvent::RabbitMQ CPAN 模块。如文档所述,您可以使用 AnyEvent::RabbitMQ 来:
- 声明和删除交易所
- 声明、删除、绑定和解除绑定队列
- 设置QoS和确认模式
- 发布、使用、获取、确认、恢复和拒绝消息
- Select,提交和回滚事务