2017-10-11 47 views
1

有没有办法配置JMS消息队列来自动删除所有收到的消息? (换句话说,对于发送者来说,它看起来好像消息到达了,但是队列应该默默地放弃它,也就是说,队列应该像“/ dev/null”一样)。如果有问题,我最感兴趣的是但是,在IBM MQ中,如果JMS规范提供了这种可能性,那就更好了。配置JMS队列以删除用于测试目的的所有消息

由于我已经试过搜索,并没有发现这种可能性,我怀疑答案是“否”。所以一个证实这种情况的答案(我不会错过任何东西)对我来说也是有效的。

使用案例:测试一个系统,该系统将消息发送到一个真正的JMS队列,该队列(在测试设置中)不会被任何其他程序读出。 (我不想嘲笑JMS队列,为了保持测试环境尽可能接近生产环境,出于同样的原因,它也不是有效的解决方案,例如为客户端的消息设置“生存时间” )

+0

在队列管理器运行的版本IBM MQ的? – JoshMc

+0

我不确定...会不会有一些版本的好的解决方案,而其他版本不可用? – Attilio

+0

@JasonE提供的pub子解决方案可以在v7.0及更高版本中使用,而不是v6和更低版本。 V7.5是目前支持的最低版本,但我问过,因为仍然有很多人使用非常旧的不受支持的MQ版本。 Jason提供的解决方案就是我假设你运行v7或更高版本时所建议的。根据你的意见,你有一个解决方案,就像罗杰建议的,但正在寻找像杰森接受的东西,我会建议你接受杰森的答案。 – JoshMc

回答

2

如何让一个队列被放置成一个没有人在听的话题的别名?

例如为:

def qalias(MYQUEUE) target(DUMMYTOPIC) targtype(TOPIC) 
def topic(DUMMYTOPIC) topicstr(DUMMYTOPIC) 

然后你就可以把队列,它成为一个发布,如果没有人在队列中聆听它消失。例如amqsput MYQUEUE QM会正常工作。

如果您想要消费这些消息,请将QALIAS更改为指向真实队列,或者使用QLOCAL替换QALIAS定义。

唯一的缺点是,如果有人订阅到每一个主题,但是出于测试目的,你可以

0

如果你想有一个不同的方法,你可以控制(开启/关闭)的信息流被删除/移除,那么MQ服务和我的'emtyq'程序是另一种选择。

这里有一个写了,我做了,而以前关于这个问题:http://www.capitalware.com/rl_blog/?p=3680

+0

是的(虽然我没有写在问题中),我们的方法是类似的:我们有一个虚拟程序来读出队列。但是,我正在寻找仅配置方式(类似于@JasonE的答案)。这很有趣:在链接文章的底部,还提到了@ JasonE的答案的一个变体:) – Attilio