【发布时间】:2016-11-28 01:05:53
【问题描述】:
这是关于 Websphere 应用程序服务、Java 消息服务、消息队列和侦听器的。
我有一个场景,我的听众可以有更多的会话。所以我的 MDB(消息驱动 bean)在 WAS 服务器线程上运行时可以有多个实例。
我的 MDB 将处理/解析收到的消息并进行一些数据库事务。因此,如果我的 MDB 收到更多消息(假设接收 2 条消息),MDB 将创建 2 个实例,因为我的侦听器会话值已设置为 2,并尝试在单个线程上同时处理这两条消息。我保留了一个 thread.sleep(1000) 来处理一个消息,而另一个实例正在处理。但是两个 MDB 实例都在同一个线程上运行,我的整个进程处于睡眠状态 1 秒,然后再次尝试并行执行两个进程并回滚两个进程。
关于这种情况的任何建议。
【问题讨论】:
-
多个实例旨在用于可并行处理的消息。如果出于某种原因您的应用程序不允许并行消息处理,则不要使用多个会话。确保一次只处理一条消息的唯一安全方法是序列化消息处理,这完全违背了多个会话的目的。
-
感谢 Yuri Steinschreiber 的回复。但这是我的要求。我的系统可以同时处理不同的用户消息(我的意思是并行)。但如果消息来自同一用户,那么我需要一个接一个地处理。
标签: jakarta-ee jms ibm-mq message-driven-bean