具有循环消费者的Spring集成优先级通道

时间:2017-01-20 15:59:58

标签: spring jms spring-integration priority-queue

我正在尝试使用spring集成实现一种优先级通道,但我被阻止,并且没有在网络上找到解决方案。

我想用服务激活器读取倍数通道(6)。每个通道用于优先级(CRITICAL,HIGHEST,HIGH,NORMAL,LOW,LOWEST)。消息来自RabbitMQ,并通过路由器分发到正确的通道上。

问题在于我想创建一个服务激活器,它可以根据时间使用循环法在频道中读取。

例如,CRITICAL应该有5个secondes运行时间,然后服务切换到HIGHEST 3秒,然后转到HIGH 1秒钟,...

弹簧集成是否可以正确完成? 也许我没有使用正确的组件来做这件事?

此致

1 个答案:

答案 0 :(得分:0)

优先频道模式的工作方式略有不同。 它是一个具有排序支持的队列。当新消息到达队列时,根据其priority将其分类到适当的位置。绝对重要的是你的消费者对这个渠道的运作方式。优先级仅在通道中发生。消费者只是轮询来自该队列的消息,就像它们为它排序一样:CRITICAL,而不是HIGHEST,如果CRITICAL不存在等等。

另一方面,如果您按优先级分配消息,请执行不同的渠道,为什么不为每个渠道分别设置服务激活器?每个优先级都将由其自己的进程读取。

根据"运行时间"没有这样的解决方案。它似乎并不适合消息传递架构。虽然您可以通过计划任务cancel()或Quartz实现"执行任务直到..."。

<强>更新

关于时间控制,我认为你可以提出一个解决方案,它在无限循环中真正start()不同的服务激活器,stop()在适当的预定时间之后。所有这些服务激活器都应该监听不同的队列通道。