这与Websphere Application Serve,Java Message Service,Message Queue和Listener有关。
我有一个场景,我的听众可以有更多的会话。所以我的MDB(消息驱动bean)在WAS服务器线程上运行时可以有多个实例。
我的MDB将处理/解析收到的消息并进行一些数据库事务。因此,如果我的MDB收到更多消息(假设接收2条消息),MDB将创建2个实例,因为我的侦听器会话值已设置为2并尝试在单个线程上同时处理这两个消息。我保留了一个thread.sleep(1000)来保存一个消息处理,而其他实例正在处理。但是两个MDB实例都在同一个线程上运行,我的整个进程都处于休眠状态1秒钟,并再次尝试并行执行这两个进程并回滚这两个进程。
有关此方案的任何建议。
答案 0 :(得分:0)
如果没有详细说明为什么你不想同时处理这两个消息,你可以用这样的方式随机化睡眠间隔。
(int) Math.floor(Math.random() * 10)
这不是一个完整的证明方法。它将根据您选择的随机化范围降低同时处理两条消息的概率(此方法将极大地降低您的吞吐量)。
我相信会有更好的方法来解决您的问题,例如 synchronized block 。您能不能更新问题,原因是您不想并行处理消息?