首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MessageDriverBean重试机制

MessageDriverBean重试机制
EN

Stack Overflow用户
提问于 2015-09-24 17:22:46
回答 1查看 1.3K关注 0票数 2

我一直在阅读谷歌的其他结果,有些人说我必须给context.setRollbackOnly();打电话,另一些人说这不是必需的,因为MDB会自己做的。

因此,我有一个MessageDrivenBean类,它接收来自JMS Queue的消息。

代码语言:javascript
复制
@MessageDriven(name = "MyEventReceiverJMS", activationConfig = {
    @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "jms/TheQueue"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge")
})
public class MyEventReceiverJMS implements MessageListener {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Resource
    private MessageDrivenContext context;


    @Override
    public void onMessage(Message message) {

        try {
            // Some logic goes here
        } 
        catch (JMSException ex) {
            logger.error("JMSException|could not retrieve object from the message body - reason: {}", ex.getMessage());
            context.setRollbackOnly();
        } 
        catch (JSONException ex) {
            logger.error("error while creating the JSON - reason: ", ex.getMessage());
            context.setRollbackOnly();
        } 
        catch (IOException ex) {
            logger.error("could not communicate with the server - reason: {}", ex.getMessage());
            context.setRollbackOnly();
        }
    }
}

我的问题是,如果onMessage上有异常,那么message (或我所称的事件)会被MDB重新放到队列中,还是必须在每次捕获时调用context.setRollbackOnly();才能返回消息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-25 06:09:17

,我是否必须在每次捕获时调用context.setRollbackOnly()才能将消息放回?

这取决于我们,如果您想回退所有异常的消息,是的。如果是坏/坏消息,则没有回滚事务的意义,最好通过记录异常和消息的有效负载来丢弃。

用于您的第一个查询,如果onMessage上有异常,消息将被放回队列中,请查找以下要点:

JMS服务器可以重新传递消息,因为: java.lang.Error或java.lang.RuntimeException已从接收方/MDB的onMessage方法中抛出 用户在MDB的ejbcontext.setRollbackOnly方法中调用了ejbcontext.setRollbackOnly() (这仅适用于容器托管事务) 由于某种原因,参与事务的MDB失败。

下面的文章非常好,您可以参考它了解更多细节:

http://weblogic-wonders.com/weblogic/2011/01/10/working-with-jms-and-the-standard-issues-in-jms/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32767374

复制
相关文章

相似问题

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