【问题标题】:Is it possible to "shovel" a persitent akka mailbox?是否可以“铲”一个持久的akka​​邮箱?
【发布时间】:2013-05-03 20:47:56
【问题描述】:

我有一个 AMQP 应用程序,它在客户端有一个持久的 RabbitMQ 队列,在服务器端有一个 RabbitMQ 队列。客户端始终写入本地持久队列,这些消息使用铲子插件传输到服务器。

Producer -> Local Queue  --------- SHOVEL ---------- Remote queue -> Consumer

无论服务器是否存在,应用程序仍然可以正常工作,并且 shovel 会尽可能发送。另一方面,服务器不需要知道客户端的位置,因为它总是从本地队列中消耗。我想使用 FilePersistent Mailbox 将此拓扑迁移到 AKKA。甚至可能吗? Akka 核心库中是否有类似 Federation 或 Shovel 的插件。

PS:我想要实现的是完全替换 AMQP 以摆脱 RabbitMQ。它工作正常,但它是另一个需要安装、配置和维护的软件。我想从我的应用程序中仅使用库而不是像 RabbitMQ 这样的其他服务器来提供所有这些功能。

只是为了澄清一点我想要实现的目标是这样的:

Actor1 -> DurableMailBox1  ----Shovel? Federation?---- DurableMailbox2 <- Actor2

[编辑]

看起来没有办法直接与邮箱通信。可以使用 AKKA 实现的可能拓扑如下:

 Remote Actor1 -> [DurableMailBox1 <- Actor2]

可以保护箭头以确保邮件传递,但不能将邮件从一个邮箱自动复制到另一个邮箱。

【问题讨论】:

    标签: akka


    【解决方案1】:

    看看 Akka RemotingReliable Proxy Pattern

    通过 ReliableProxy 发送使消息发送完全可靠 就好像表示的目标是在同一个 JVM 中一样, 前提是远程参与者系统不会终止。有效, 两端(即 JVM 和 Actor 系统)必须被视为一个 评估此通信渠道的可靠性。好处 是不是中间的网络从那个方程中取出来了。

    请参阅 this enhancement 到 ReliableProxy,它可以缓解远程参与者系统终止的问题。

    【讨论】:

    • tnks,你的回答让我去了这篇文章stackoverflow.com/questions/14613931,看起来我无法用 AKKA 替换我的 RabbitMQ 服务器,因为 Realible Proxy 模式不会保留消息。在我使用 AMQP+Rabbit 的拓扑中,我可以将消息发送到甚至没有运行的节点,并且我的应用程序可能会崩溃而不会丢失消息。当节点可用时,它会毫不费力地接收所有消息。如果我使用可靠的代理模式,我需要编写代码来持久化消息并重试它们(正是 shovel 所做的)。
    • 我以为你会使用FileBasedMailboxType 来提高耐用性?在此处查看更多信息:doc.akka.io/docs/akka/2.1.0/modules/durable-mailbox.html
    • 使用FBMT的问题是服务器不知道客户端的位置,如果我把FBMT放在服务器中服务器死了,或者WAN很慢等等等等客户端在服务器恢复之前无法发送消息。
    • 添加了对问题的编辑以显示持久邮箱和可靠代理模式存在的问题。
    • 每个演员都有一个邮箱。演员无权访问其他演员的邮箱。我不确定“在服务器恢复之前客户端无法发送消息”是什么意思。这就是ReliableProxy 的用途。它会不断重试,直到服务器恢复正常。
    猜你喜欢
    • 2012-12-17
    • 2012-04-24
    • 2019-11-24
    • 2013-02-20
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    相关资源
    最近更新 更多