我正在尝试使用RabbitMQ在MULE ESB中提供的优先级队列机制。
我创建了一个x-max-priority = 3
的队列,在一个新的Mule Proyect中,我设置了3个AMQP:连接器,每个优先级一个,如下所示:
<amqp:connector
name="amqpLocalhostConnector0"
host="${amqp.host}"
port="${amqp.port}"
fallbackAddresses="${amqp.fallbackAddresses}"
virtualHost="${amqp.virtualHost}"
username="${amqp.username}"
password="${amqp.password}"
priority="0"
ackMode="AMQP_AUTO"
prefetchCount="${amqp.prefetchCount}" />
/* The values within ${} are taken from a properties file.
* Priorities are: "0", "1", "2" */
然后,除了连接器中使用的属性priority
之外,还有一个简单的流,它每隔一秒向队列中发送包含优先级作为字符串的队列。
<flow name="rabbitmqFlow1" doc:name="rabbitmqFlow1">
<poll frequency="1000" doc:name="Poll">
<set-payload value="PRIORITY 1" doc:name="Set Payload"/>
</poll>
<amqp:outbound-endpoint
exchangeName="amq.direct"
routingKey="priority"
connector-ref="amqpLocalhostConnector0">
</amqp:outbound-endpoint>
</flow>
我手动重复此过程,交替使用每个消息批处理使用的优先级。这样,我的队列就有几条混合了不同优先级的消息。
现在,如果我使用管理界面中的“获取消息”按钮手动使消息出列,则会根据优先级传递消息:首先是优先级为2的那些消息,然后是优先级为1的消息,最后是优先级为0的消息。
当我尝试使用MULE中的amqp:inbound-endpoint
组件获取消息时,问题。 这是另一个简单的流程,它只从优先级队列中获取消息,并显示每个消息的内容。
<flow name="rabbitmqFlow2" doc:name="rabbitmqFlow2">
<amqp:inbound-endpoint
queueName="priority"/>
<byte-array-to-string-transformer doc:name="Byte Array to String"/>
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
</flow>
这里的消息是按照它们发送到队列的顺序获得的,而不是根据它们的优先级。
如何从队列中读取关于优先级的消息?