我有一个非常基本的框架Scala应用程序(使用Akka,Camel和ActiveMQ),我希望尽快将其发布到ActiveMQ队列,但之后只能以特定速率从该队列中消耗(例如1)每秒)。
以下是一些代码来说明:
MyProducer.scala
class Producer extends Actor with Producer with Oneway {
def endpointUri = "activemq:myqueue"
}
MyConsumer.scala
class MyConsumer extends Actor with Consumer {
def endpointUri = "activemq:myqueue"
def receive = {
case msg: CamelMessage => println("Ping!")
}
}
在我的主要方法中,然后我将所有样板设置为Camel并让它与ActiveMQ对话,然后我有:
// Start the consumer
val consumer = system.actorOf(Props[MyConsumer])
val producer = system.actorOf(Props[MyProducer])
// Imagine I call this line 100+ times
producer ! "message"
我如何才能使MyProducer
尽可能快地向ActiveMQ发送内容(即没有限制),同时确保MyConsumer
只读取每个 x 秒?我希望每条消息都保留在ActiveMQ队列中,直到最后一刻(即MyConsumer
读取它)。
到目前为止,我已设法使用TimerBasedThrottler
以一定的费率消费,但这仍然消耗了所有消息。
道歉,如果我一路上遗漏了一些东西,我对Akka / Camel来说相对较新。
答案 0 :(得分:0)
有多少消费者包含" MyConsumer"?
a)如果它只是一个,那么不清楚为什么阅读/消费消息之间的简单睡眠不起作用。
如果有多个消费者,您需要哪种行为:
在这个问题中,您可能正在寻找其他/更具体的内容。如果是,请详细说明。