基于规则的消息路由

时间:2017-06-23 04:58:28

标签: java java-ee mqtt messaging vert.x

我正在寻找适合以下情况的Java服务器技术:

客户端X发送消息 - >某些服务器组件根据某些规则决定,例如if message from client X and content equals Y, forward message to Client Z (or a group of clients)

客户端Z(或读取该消息的第一个组)确认该消息并采取进一步的(物理)操作。

消息应该可靠地发送到客户端并记录/存储在某个地方,以便能够回溯客户端发送了什么类型的消息以及客户端确认了哪些消息。

有最大值200个客户端,可能每小时大约200-300个消息,因此性能/吞吐量不是"那个"重要的。

可能的技术:

  • 服务器:Java EE(例如Wildfly Swarm)或vert.x ...
  • 客户:Android平板电脑上的JavaScript网络应用程序(可提供Web插件)
  • 存储:MySQL,NoSQL,......

对我而言,看起来MQTT Broker可能适合服务器端......你怎么看?对我来说最大的问题是如何/在哪里实现路由逻辑(if message from client X then forward to...)和日志/存储。

1 个答案:

答案 0 :(得分:2)

令我感到震惊的是,设置基于内容的路由类型会破坏MQTT所基于的整个发布者 - >代理 - >订阅者模型。我的理解是,大多数MQTT经纪人都认为处理将在客户端进行,而不是在代理本身进行。我假设您可以实现它,但这将是我的(语言无关)建议。

  1. 客户端X在内部解析消息,如果内容为Y,则将其发送到主题A.

  2. 由于客户Z知道主题A上的任何消息都有其想要的内容,因此客户Z订阅主题A并接收内容Y.

  3. 如果绝对要求客户X不处理处理,则可以执行以下操作:

    1. 客户端X将消息发送到主题X。

    2. 客户A订阅了主题X并解析了寻找Y的消息。

    3. 如果找到Y,则客户端A向主题Z发布消息。

    4. 客户Z订阅主题Z并接收内容Y。

    5. 这种方法有点笨重,但它适合MQTT的逻辑和结构。