我们使用RabbitMQ 3.5.7作为消息总线,版本为1.3.1。
对于通过输入队列接收消息的流,我希望能够设置消息优先级。我已经确认我可以通过amqp模板和MessagePostProcessor这样做。那是当我检查队列(没有消费者)时,我看到正确设置了优先级头。但是,当我部署流(只有一个消费者)时,它按照收到的消息的顺序消耗。根据我的阅读,优先级为7的消息应该在优先级为5的消息之前消耗 - 例如 - 我希望这是正确的吗?
我的问题是我是否需要在spring-xd设置端执行任何操作以启用消息优先级排序?
谢谢, 标记
嗨加里 - 我认为短信总线很好。问题在于我通过以下方式创建的制作人:
<rabbit:queue name="foo">
<rabbit:queue-arguments>
<entry key="x-max-priority" value="10"/>
</rabbit:queue-arguments>
</rabbit:queue>
我们正在弹出批处理作业上创建/实例化此队列。我查看了rabbitmq的错误日志:它有这样的消息:
= ERROR REPORT ==== 2016年4月13日:: 11:01:35 ===频道错误 连接&lt; 0.15708.1&gt; (127.0.0.1:40887 - &gt; 127.0.0.1:5672,vhost:'/', user:'guest'),频道1:{amqp_error,precondition_failed, “队列'xdbus.queue中的不等效arg'x-max-priority':vhost'/'中的CPSFileCopyWorker_ws0':收到'10'但是 当前是'10'“, 'queue.declare'}
这似乎允许队列定义为已创建的队列我们优先级arg设置:
<rabbit:queue name="foo" auto-declare="false">
<rabbit:queue-arguments>
<entry key="x-max-priority" value="10"/>
</rabbit:queue-arguments>
</rabbit:queue>
答案 0 :(得分:0)
我认为你的意思是一个流rabbit | ...
而不是谈论XD在使用兔子传输时使用的内部队列。
如果是这样,XD方面没有什么特别需要,但你必须configure the queue to support priority。
修改强>
以下是来自消息总线的代码......
private void declareQueueIfNotPresent(Queue queue) {
if (this.rabbitAdmin.getQueueProperties(queue.getName()) == null) {
this.rabbitAdmin.declareQueue(queue);
}
}