当前位置:  开发笔记 > 编程语言 > 正文

如何临时禁用消息侦听器

如何解决《如何临时禁用消息侦听器》经验,为你挑选了1个好方法。

什么是临时禁用消息监听器的好方法?我想解决的问题是:

消息侦听器接收JMS消息

尝试处理邮件时出错.

我等待我的系统再次准备好能够处理消息.

在我的系统准备好之前,我不再需要任何消息了,所以...

...我想禁用消息监听器.

我的系统已准备好再次处理.

处理失败的消息,并确认JMS消息.

再次启用消息侦听器.

现在,我正在使用Sun App Server.我通过在MessageConsumer中将其设置为null来禁用消息侦听器,并使用setMessageListener(myOldMessageListener)再次启用它,但在此之后我不再收到任何消息.



1> John M..:

如果你没有从onMessage()监听器方法返回,直到你的系统准备好再次处理消息,那该怎么办?这将阻止JMS向该消费者传递另一条消息.

这是在同步情况下不调用receive()的异步等价物.

对于给定的JMS会话,没有多线程,因此在onMessage()方法返回之前,会保留消息管道.

我不熟悉动态调用setMessageListener()的含义.javadoc表示,如果"当现有的监听器或同步消费者使用消息时",则会出现未定义的行为.如果你是从onMessage()中调用的话,那听起来就像是你遇到了那个未定义的情况.

在连接级别有启动/停止方法,如果这对您来说不是太粗糙.


我只是注意到JMS规范明确指定了这种串行传递行为.这是JMS 1.0.2规范的4.4.16节.在过去,我认为它只是隐含在线程规则中.
推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有