使用Spring-XD进行消息优先级排序

时间:2016-04-12 17:27:26

标签: spring-xd

我们使用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>

1 个答案:

答案 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);
    }
}