【问题标题】:Akka Event Bus: find unconsumed events in a channel?Akka Event Bus:在频道中查找未使用的事件?
【发布时间】:2014-02-16 23:32:11
【问题描述】:

如果一个 Actor 启动并订阅了 Akka Event Bus 中的一个通道,那么这个 Actor 有没有办法消费已经发送到该通道但没有被任何其他 Actor 消费的事件?

换句话说,我希望演员“收集邮件”。我不知道,也许事件总线是错误的。

【问题讨论】:

    标签: scala akka message-queue event-bus


    【解决方案1】:

    如果没有订阅频道,则消息将发送到 DeadLetter 频道。理论上,您可以编写一个自定义 Actor 并将其订阅到 Deadletter 事件流(查看 DeadLetter 的记录器 Actor)以跟踪所有未使用的消息。您可以在每个通道的参与者中设置一个按大小绑定的队列(“最后 n 条消息邮箱”),并使其监听自定义通道“邮件”。邮箱队列也可以基于外部持久性(redis、rdbs 等)。您频道的每个新订阅者都应检查“邮件”频道并使用邮件参与者中特定主题队列中的所有消息(如果有)。这模拟了任何启用持久性的代理上的常规消息队列。

    【讨论】:

    • 有趣的解决方案,但对我来说感觉太大了,就像我将事件总线变成了它不是为它设计的东西。也许我应该使用一些常规的消息队列,但我不想一直轮询它,而且由于构建速度很慢,我对向我的项目添加另一个依赖项持谨慎态度。
    • 如果我理解正确的话,不需要连续轮询,只有当一个新演员订阅时,它才会检查“邮件”,所以“邮箱”队列被清空,除非有没有演员订阅,消息再次发送到 Deadletter。
    • 这是一个解决方案,虽然我希望有一些更简单和内置的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2020-06-12
    • 2020-02-16
    相关资源
    最近更新 更多