Apache camel 具有后进先出订单的Apache Camel SEDA队列?
我需要一个camel组件,它与SEDA组件的功能(即队列)非常相似,但我需要以后进先出的顺序显示消息。据我在文档中看到的,SEDA组件没有配置选项允许这样做。Apache camel 具有后进先出订单的Apache Camel SEDA队列?,apache-camel,Apache Camel,我需要一个camel组件,它与SEDA组件的功能(即队列)非常相似,但我需要以后进先出的顺序显示消息。据我在文档中看到的,SEDA组件没有配置选项允许这样做。 是否有其他方法来配置该组件或其他合适的组件?您可以使用SedaComponent上的defaultQueueFactory选项配置自定义BlockingQueueFactory。在该队列工厂中,您可以创建使用不同排序的队列。您可以使用组件上的defaultQueueFactory选项配置自定义BlockingQueueFactory。在该
是否有其他方法来配置该组件或其他合适的组件?您可以使用
SedaComponent
上的defaultQueueFactory
选项配置自定义BlockingQueueFactory
。在该队列工厂中,您可以创建使用不同排序的队列。您可以使用组件上的defaultQueueFactory
选项配置自定义BlockingQueueFactory
。在该队列工厂中,您可以创建一个使用不同排序的队列。克劳斯·易卜生的回答让我走上了正确的道路,但有点模糊,因此我将更详细地介绍我提出的最终解决方案。它在kotlin和Spring Boot中:
首先,PriorityBlockingQueue似乎是唯一可以控制交付订单的实现,所有其他标准实现似乎都是FIFO
PriorityBlockingQueue将比较器作为构造函数参数,因此我编写了一个简短的比较器,以按创建时间对交换进行排序:
/**
* Comparator to sort Exchanges in ascending order by time, newest first.
* Is inconsistent with equals()!
*/
class NewestExchangeFirstComparator : Comparator<Exchange> {
override fun compare(o1: Exchange, o2: Exchange): Int =
when {
o1.created.after(o2.created) -> -1
o1.created.before(o2.created) -> 1
else -> 0
}
}
就是这样。克劳斯·易卜生的答案让我走上了正确的道路,但有点模糊,所以我将更详细地介绍我提出的最终解决方案。它在kotlin和Spring Boot中:
首先,PriorityBlockingQueue似乎是唯一可以控制交付订单的实现,所有其他标准实现似乎都是FIFO
PriorityBlockingQueue将比较器作为构造函数参数,因此我编写了一个简短的比较器,以按创建时间对交换进行排序:
/**
* Comparator to sort Exchanges in ascending order by time, newest first.
* Is inconsistent with equals()!
*/
class NewestExchangeFirstComparator : Comparator<Exchange> {
override fun compare(o1: Exchange, o2: Exchange): Int =
when {
o1.created.after(o2.created) -> -1
o1.created.before(o2.created) -> 1
else -> 0
}
}
就这样
from("$SEDA_IMAGE_QUEUE?queue=#FiloBlockingQueue")
.routeId("upload to gateway")
.log("Found new image \${header.filename}")
.process().message {
gatewayFacade.uploadImage(it.body as ByteArray, it.getHeader("filename") as String)
}