如何为每个客户端实现一个消息队列?

时间:2013-06-01 11:29:08

标签: java java-ee

我目前正在java中实现点对点消息传递应用程序。目前我有点困惑一个问题。在我的应用程序中,我想要一个将驻留在每个对等体中的消息队列,并且希望与其他对等体通信的其他对等体实际上继续并在其他对等体MQ(消息队列)中写入消息。

对于Eg。 A和B是网络中的两个不同的对等体/节点。

现在A想要向B发送消息,然后继续将消息写入B的队列。 B将继续从它自己的MQ中提取消息。

我不知道使用哪个Java库可以轻松地让我实现它。

我已经对此进行了大量搜索,但从未找到适当的解决方案。

任何人都可以建议我实现这个的好方法。

2 个答案:

答案 0 :(得分:0)

从A到B发送消息非常简单,只需打开套接字或使用非阻塞网络库,例如NettyApache Mina。两者都提供了几个在堆栈之上实现网络通信的示例。

您可能需要决定网络拓扑的方式,如果只连接了2-3-4个对等体,您可以让每个对等体为每个其他对等体设置一个开放套接字。

如果预计会有很多对等体,那么为每个对等体设置一个套接字将很困难甚至是不可能的,并且需要不同的拓扑结构:

  1. 每个对等体只知道其中的一些邻居,其他对等体可通过使用某些路由逻辑从对等端跳转来到达。
  2. 另一种解决方案是拥有一个集中节点,所有对等方都在这里检查(这就是Skype或大多数其他IM网络的工作方式)。

答案 1 :(得分:0)

我想我可以将RMI用于此目的。在我的例子中,每个对等体将充当服务器并运行rmiregistry。我的界面文件将包含apis来填充Message Queue。其他对等体将使用RMI调用API来更新队列。间接地,我的其他对等体将更新它想要通信的对等体上的消息队列。

我不知道这是否是一种正确的实施方式,所有建议仍然受到欢迎。