Java 基于规则的消息路由

Java 基于规则的消息路由,java,jakarta-ee,mqtt,messaging,vert.x,Java,Jakarta Ee,Mqtt,Messaging,Vert.x,我正在寻找适合以下场景的Java服务器技术: 客户端X发送一条消息->一些服务器组件根据某些规则决定,例如,如果来自客户端X的消息和内容等于Y,则将消息转发给客户端Z(或一组客户端) 客户端Z(或组中读取消息的第一个客户端)确认消息并采取进一步(物理)操作 消息应可靠地发送到客户机,并记录/存储在某个位置,以便能够追溯客户机发送了什么类型的消息以及客户机确认了什么类型的消息 最多有200个客户端,每小时大约有200-300条消息,因此性能/吞吐量并不“那么”重要 可能的技术: 服务器:Java

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

客户端X发送一条消息->一些服务器组件根据某些规则决定,例如,如果来自客户端X的消息和内容等于Y,则将消息转发给客户端Z(或一组客户端)

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

消息应可靠地发送到客户机,并记录/存储在某个位置,以便能够追溯客户机发送了什么类型的消息以及客户机确认了什么类型的消息

最多有200个客户端,每小时大约有200-300条消息,因此性能/吞吐量并不“那么”重要

可能的技术:

  • 服务器:JavaEE(如Wildfly Swarm)或vert.x
  • 客户端:Android平板电脑上的JavaScript web应用程序(提供web套接字)
  • 存储:MySQL,NoSQL

在我看来,MQTT代理可能适合在服务器端执行此操作。。。你怎么认为?对我来说,最大的疑问是如何/在何处实现路由逻辑(
如果消息来自客户机X,则转发到…
)和日志/存储。

我感到设置基于内容的路由有点挫败了MQTT所基于的整个发布者->代理->订户模型。我的理解是,大多数MQTT代理假定处理将在客户机上进行,而不是在代理本身中进行。我想您可以实现它,但这将是我(语言不可知论者)的建议

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

  • 客户机Z知道主题A上的任何消息都有它想要的内容,因此客户机Z订阅主题A并接收内容Y

  • 如果有一些绝对要求,即处理不能由客户机X处理,您可以这样做:

  • 客户端X将消息发送到主题X

  • 客户端A订阅了主题X并解析消息以查找Y

  • 如果找到Y,客户端A将向主题Z发布消息

  • 客户端Z订阅主题Z并接收内容Y


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

    Exzellent。这正是我要寻找的,有没有现成的解决方案可以实现这样的消息路由逻辑?