首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让EJB MessageDrivenBean像DefaultMessageListenerContainer一样工作(JMS,OpenMQ)

让EJB MessageDrivenBean像DefaultMessageListenerContainer一样工作(JMS,OpenMQ)
EN

Stack Overflow用户
提问于 2011-11-30 18:08:25
回答 1查看 503关注 0票数 0

由于我使用的是Glassfish DefaultMessageListenerContainer,在这方面并不是很先进,所以我使用了Spring OpenMQ来获得一些动态设置Group值的好处。让我们有一条JMS消息。监听器发出一个特定的故障,表示:在x秒后重试。它再次尝试,但失败了:在x*y秒后重试,依此类推,时间呈指数增长。如果在z重试后无法处理它,请将其视为有害的JMS消息。

代码语言:javascript
复制
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解决方案的变通方法吗?如果有任何帮助,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-02 17:02:36

要实现对消息选择器的动态更改,您需要直接在JMS中实现它,例如

代码语言:javascript
复制
ConnectionFactory cf;
Connection connection = cf.createConnection();
session = connection.createSession(transactional, acknowledgeMode);

MessageConsumer messageConsumer = session.createConsumer(destination, "message selector");

此外,您还需要将此代码放在它自己执行的某个位置,也许是在异步任务中?但您将重新发明轮子,因为Spring DMLC在这方面做得更好。

我不知道你为什么要这么做:

用于负载平衡的

  • ?message broker应该处理这个问题。
  • 用于处理临时停机吗?队列应配置为能够存储适当数量的消息,或将传递切换到群集中的其他节点。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8324201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档