基于规则的消息路由

Message routing based on rules

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

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

客户 Z(或第一个阅读消息的组)确认消息并采取进一步的(物理)行动。

消息应该可靠地发送给客户端和logged/stored某处,以便能够追溯哪个客户端发送了什么样的消息以及哪个客户端确认了消息。

最大。 200 个客户端,可能每小时大约 200-300 条消息,因此 performance/throughput 并不 "that" 重要。

可能的技术:

对我来说,MQTT Broker 似乎适合在服务器端执行此操作...您怎么看?对我来说最大的问号是 how/where 实现路由逻辑 (if message from client X then forward to...) 和 logging/storage.

令我震惊的是,设置基于内容的路由会破坏 MQTT 所基于的整个发布者->代理->订阅者模型。我的理解是,大多数 MQTT 代理都假定处理将发生在客户端,而不是代理本身。我假设你可以实现它,但这将是我的(语言不可知论者)建议。

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

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

如果绝对要求处理不由客户端 X 处理,您可以改为执行以下操作:

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

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

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

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

这种方法有点笨拙,但它符合 MQTT 的逻辑和结构。