RabbitMQ优先级队列无法在MULE中运行

时间:2015-07-14 13:43:18

标签: rabbitmq mule amqp priority-queue mule-component

我正在尝试使用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>

这里的消息是按照它们发送到队列的顺序获得的,而不是根据它们的优先级。

如何从队列中读取关于优先级的消息?

0 个答案:

没有答案