2012-10-01 97 views
0

我目前正在设计一个移动应用程序,可以根据用户位置发送和读取消息到时间线。实际开发版本使用ActiveMQ来发送和使用消息,但它仍未完成,因此我倾向于在继续开发之前定义体系结构应如何避免未来的问题。我不确定这是否是正确的方法,但这是我的想法:使用消息队列的基于位置的消息系统的系统体系结构

  • 每个用户都是将消息发送到其队列的生产者。队列名称可以是用户的唯一ID。
  • 如果用户足够接近,用户可以订阅其他用户的队列。这涉及到类似的话题到一组用户队列。该队列应该是动态的,通过检索位于固定半径内的用户生成,该用户是消费者位置的圆圈的中心。每个用户都有它自己的主题队列像这样(与Twitter的时间轴非常相似的概念)。这意味着每个用户队列将有多个消费者。

从客户端来说,我一直使用Objective-C stomp客户端作为队列的连接协议。

我的问题是,这是一个很好的方法来解决这个问题吗?我不确定用户订阅近用户是否可以使用ActiveMQ和主题。您对此时间表订阅问题有任何建议吗?另一方面,我很清楚每个用户都需要成为自己队伍的制片人,但也许我错了。

编辑

任何引用,链接,书等有关主题的详细信息,将不胜感激。

回答

1

关闭顶部,一对夫妇的这个想法...

  • 使用主题而不是队列,以“广播”消息给多个用户,等
  • 动态订阅基于位置不似乎是一个很适合JMS技术,我
  • 考虑使用一些与地理空间(也称为基于位置的)索引/搜索内置的(如mongoDB或空间数据库)
+0

我一直在想这个,我有一个想法。我正在考虑使用主题而不是队列(我仍然需要处理持久化事件)来创建基于位置的聊天室,而不是直接用户通信。另外,为了取回离您最近的聊天室,您认为使用地理空间索引而不是PostgreSQL将这些房间存储在mongoDB中会更好吗? – amb

0

一个问题是添加一个新用户意味着添加一个新的队列。这是如何完成的?这不会限制您的系统可以支持的用户数量吗?

您可以让用户生成消息发送到某个主题并注册为消费者。

另一种方法是非阻塞IO和Netty

+0

公关使用该解决方案的问题是,用户必须注册一个通常不会代表他所在地区的现有主题。它会像预先存在的电话单元一样,用户进入或退出固定单元,但不是它的中心。 – amb

+0

您必须将注册表放在中心位置。 – duffymo