2013-05-03 24 views
1

我有一个AMQP应用程序,在客户端有一个持久的RabbitMQ队列,在服务器端有一个RabbitMQ队列。客户端总是在本地持久队列中写入,并使用铲子插件将这些消息传输到服务器。是否有可能“铲”一个perstent akka邮箱?

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

服务器是否不存在应用剧照作品和铲确实当发送可能。另一方面,服务器不需要知道客户端的位置,因为它始终来自本地队列。我想使用FilePersistent Mailbox将此拓扑迁移到AKKA。它甚至有可能吗?在Akka核心库中是否有类似Federation或Shovel的插件?

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

只是为了澄清多一点什么,我希望做到的,是这样的:

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

[编辑]

它看起来像有没有办法直接沟通邮箱的邮箱。可与AKKA来实现的可能的拓扑结构是这些:

Remote Actor1 -> [DurableMailBox1 <- Actor2] 

其中箭头可以被固定,以确保消息的传送,但不可能从一个邮箱自动复制消息到其它邮箱。

回答

0

看看Akka RemotingReliable Proxy Pattern

通过ReliableProxy发送使得信息发送准确可靠 仿佛代表了目标在同一个JVM内生活, 提供远程演员系统不会终止。实际上,当 评估此通信信道的可靠性时,两端(即JVM和参与者系统)必须被视为一个。 的好处是中间的网络不在该方程中。

请参阅this enhancement ReliableProxy减轻远程参与者系统终止的问题。

+0

TNKS,你的回答让我去这个帖子http://stackoverflow.com/questions/14613931,它看起来像我将无法与AKKA来代替我的RabbitMQ服务器,因为Realible代理模式不持续的消息。在我使用AMQP + Rabbit的拓扑结构中,我可以将消息发送给即使没有运行的节点,但我的应用程序可能会崩溃而没有丢失消息的危险。当节点变得可用时,它接收所有消息而没有麻烦。如果我使用可靠的代理模式,我需要编写代码来保存消息并重试它们(正是铲子所做的)。 – rsan 2013-05-05 19:49:22

+0

我以为你打算使用'FileBasedMailboxType'来保持耐久性?在这里看到更多的信息:http://doc.akka.io/docs/akka/2.1.0/modules/durable-mailbox.html – sourcedelica 2013-05-06 14:36:58

+0

使用FBMT的问题是服务器不知道客户端的位置,如果我把FBMT放在服务器上,服务器死了,或者WAN慢了,等等,客户端不能发送消息,直到服务器恢复。 – rsan 2013-05-06 16:24:27

相关问题