由于我使用的是Glassfish DefaultMessageListenerContainer,在这方面并不是很先进,所以我使用了Spring OpenMQ来获得一些动态设置Group值的好处。让我们有一条JMS消息。监听器发出一个特定的故障,表示:在x秒后重试。它再次尝试,但失败了:在x*y秒后重试,依此类推,时间呈指数增长。如果在z重试后无法处理它,请将其视为有害的JMS消息。
DefaultMessageListenerContainer dmlc;
dmlc.stop();
dmlc.setMessageSelector(String.format("retries < %d AND retryTime <= %d", z, System.currentTimeMillis()));
dmlc.start();我对这个解决方案不太满意,特别是当Spring文档在这里提出警告的时候:-)。然而,就目前而言,一切都满足了我们的需求。
现在,我在不同的应用程序上有许多EJB消息使用者。其中一些需要这样的messageSelector动态变化。不幸的是,据我所知,EJB不支持这样的动态“特性”。例如,see this。
对吗?有EJB解决方案的变通方法吗?如果有任何帮助,我将不胜感激。
发布于 2011-12-02 17:02:36
要实现对消息选择器的动态更改,您需要直接在JMS中实现它,例如
ConnectionFactory cf;
Connection connection = cf.createConnection();
session = connection.createSession(transactional, acknowledgeMode);
MessageConsumer messageConsumer = session.createConsumer(destination, "message selector");此外,您还需要将此代码放在它自己执行的某个位置,也许是在异步任务中?但您将重新发明轮子,因为Spring DMLC在这方面做得更好。
我不知道你为什么要这么做:
用于负载平衡的
https://stackoverflow.com/questions/8324201
复制相似问题