Alpakka的无限AMQP消费者

时间:2019-03-14 15:48:26

标签: akka-stream alpakka

我正在尝试通过Alpakka实现与AMQP经纪人连接的非常简单的服务。我只希望它在将消息推送到给定的Exchange /主题时将其消息作为流消耗掉。

在我的测试中,一切似乎都可以正常工作,但是当我尝试启动服务时,我意识到我的流只消耗一次消息,然后退出。

基本上我正在使用Alpakka文档中的代码:

def consume()={
    val amqpSource = AmqpSource.committableSource(
      TemporaryQueueSourceSettings(connectionProvider, exchangeName)
        .withDeclaration(exchangeDeclaration)
        .withRoutingKey(topic),
      bufferSize = prefetchCount
    )

    val amqpSink = AmqpSink.replyTo(AmqpReplyToSinkSettings(connectionProvider))

    amqpSource.mapAsync(4)(msg => onMessage(msg)).runWith(amqpSink)
}

我试图每秒钟安排一次consume()执行,但是遇到了OutOfMemoryException问题。

有什么适当的方法可以使此代码作为无限循环运行?

1 个答案:

答案 0 :(得分:1)

如果要使Source失败或被取消时重新启动,请用RestartSource.withBackoff将其包装起来。