java 处理大量JMS消息类型

ru9i0ody  于 2022-12-02  发布在  Java
关注(0)|答案(2)|浏览(181)

我是jms的新手,目前正在设计一个战舰游戏。我使用jms和activemq来进行它们之间的通信,到目前为止,我为jms通信制作了4个类,分别是Topic和Queue接收器和发送器,并提供了简单的改变目的地和发送的方法。
现在我面临着一个问题,当我想要处理这些消息,我已经决定每个消息将通过ObjectMessage和内部对象将告诉侦听器如何处理它。
我有5种不同类别的消息:验证、数据(如高分、重播等)、游戏消息(发货登记、回合更新等)、聊天消息、配对消息(仅限游戏搜索和游戏搜索取消)、
因此,我认为向每个消息添加MessageType枚举是一个好主意,但最终我在编写侦听器时,在switch语句中使用了20多个case,并使用了大量的类转换。
现在我想重新写一遍,但是我仍然停留在消息处理上,因为我找不到不同的想法,或者任何可以处理这个问题的设计模式。
有什么想法吗?

xhv8bpkk

xhv8bpkk1#

您可以使用“MessageType”枚举的值来设置JMS属性。JMSType是一个内置属性,您可以使用它来设置JMS属性,也可以将自己的属性添加到每个消息(名称类似于“MessageType”)
在客户端,读取消息并测试该属性的值,然后将其转换回switch语句中的枚举,然后基于与消息关联的类的对象执行消息的转换。仅使用一个主题,每个客户端都订阅该主题。
除了switch语句,您可以基于JMS选择器为每个消息类型设置一个监听器,每个监听器只选择JMS属性(即MessageType)的一个值。

e4eetjau

e4eetjau2#

您可以对不同的邮件类别使用不同的主题/队列。
您还可以向邮件添加属性。
你可以使用像spring这样的框架,特别是MessageListenerAdapter,看看spring jms
编辑:
我可以看到一些设计模式,你可以看看:可能是Chain of Responsability或者Observer或者EventListener
这里的要点是,你只有一个 handler,它将处理所有类型的消息,读取一个属性,然后决定如何处理它。解决方案可能是有许多 * handler *,一种一种的消息,并找到一种方法来路由消息到正确的处理程序。
Chain of Responsability可以解决以下问题:将消息传递给链中的第一个处理程序,如果它与消息有关,则可以处理该消息,否则将消息传递给下一个处理程序,依此类推。

相关问题