rabbitmq - 来自 RabbitMQ 队列的 Mule ESB 多线程消费者
问题描述
在我的 MuleESB 应用程序配置中,我有一个 RabbitMQ 队列,我想在顺序无关紧要的情况下使用多线程处理消息。
我有以下配置:
<amqp:connector name="RabbitMQMultiThread" validateConnections="true" host="${rabbitmq_host}" port="${rabbitmq_port}" fallbackAddresses="${rabbitmq_fallback_addresses}" virtualHost="${rabbitmq_virtual_host}" username="${rabbitmq_username}" password="${rabbitmq_password}" ackMode="AMQP_AUTO" doc:name="AMQP Connector">
<reconnect-forever frequency="30000"/>
</amqp:connector>
我想在我的流程中使用该 AMQP 连接器配置,如下所示:
<flow name="mule-flow">
<amqp:inbound-endpoint connector-ref="RabbitMQMultiThread" responseTimeout="10000" exchange-pattern="request-response" doc:name="AMQP-0-9" queueName="myqueue"/>
<logger message="got message" level="INFO" category="mycategory" doc:name="Logger"/>
<component doc:name="myPojo">
<spring-object bean="myPojo"/>
</component>
</flow>
是否可以使用我拥有的流配置在 Mule 中使用多线程来使用来自 RabbitMQ 的消息?
解决方案
是的,Mule 会自动执行此操作。参考:https ://docs.mulesoft.com/mule-runtime/3.8/flow-processing-strategies#implicit-processing-strategies
我们必须保留消息的顺序,因此我们将流设置为同步并将 numChannels 和 prefetch 设置为 1。
<amqp:connector name="AMQP_Connector" validateConnections="true" host="${amqp.host}" port="${amqp.port}" username="${amqp.user}" password="${amqp.password}" numberOfChannels="1" prefetchCount="1" doc:name="AMQP-0-9 Connector" virtualHost="${amqp.virtualHost}">
推荐阅读
- java - spring-cloud-dataflow-server 中部署的服务如何连接到另一个数据库而不是 dataflow-sever 使用的数据库?
- azure-data-factory-2 - 使用布尔变量时 ADF V2 失败
- python - Python pymysql 将变量值动态绑定到数据库字段
- java - Spring JPA:如何在同一个请求中更新 2 个不同的“DataSource”中的 2 个不同的表?
- node.js - 了解 NodejS 中的 Express 会话
- generics - 在 F# 中,两种泛型类型约束表示有什么区别
- excel - 根据收费汇总占用面积,但不包括重复项
- android - 实施 'com.android.support:appcompat-v7:28.0.0' - 无法解决:firebase-core/auth-15.0.0
- android - 仅显示电子邮件程序时发送电子邮件
- angular - 无法在 Angular 材料表中设置未定义错误的属性“filterPredicate”