我一直在使用JMS和ActiveMQ.一切都在创造奇迹.我不是用春天,也不是我.
界面javax.jms.MessageListener只有一种方法onMessage.在实现中,有可能抛出异常.如果事实上抛出异常,那么我说消息没有正确处理,需要重新尝试.所以,我需要ActiveMQ等待一段时间,然后重试.即我需要抛出异常来回滚JMS事务.
我怎样才能完成这样的行为?
也许ActiveMQ中有一些我无法找到的配置.
或者......也许可以取消MessageListener向消费者注册并自己消费消息,如下所示:
while (true) {
// ... some administrative stuff like ...
session = connection.createSesstion(true, SESSION_TRANSACTED)
try {
Message m = receiver.receive(queue, 1000L);
theMessageListener.onMessage(m);
session.commit();
} catch (Exception e) {
session.rollback();
Thread.sleep(someTimeDefinedSomewhereElse);
}
// ... some more administrative stuff
}
Run Code Online (Sandbox Code Playgroud)
在几个线程中,而不是注册监听器.
或者......我可以以某种方式装饰/ AOP /字节操纵MessageListeners来自己做.
你会采取什么途径?为什么?
注意:我没有完全控制MessageListeners代码.
编辑 概念证明的测试:
@Test
@Ignore("Interactive test, just a proof of concept")
public void transaccionConListener() throws Exception {
final AtomicInteger atomicInteger = …Run Code Online (Sandbox Code Playgroud) 有没有人有一个在独立的 junit测试中使用Apache Qpid的例子.
理想情况下,我希望能够动态创建一个队列,我可以在我的测试中放置/获取msgs.所以我没有在我的测试中测试QPid,我会使用集成测试,但是测试处理msgs的方法非常有用,不得不模拟一大堆服务.
我想绑定C-`(control-backquote)但我不能这样做.
性别
(global-set-key "\M-`" 'other-window)
Run Code Online (Sandbox Code Playgroud)
工作,而
(global-set-key "\C-`" 'other-window)
Run Code Online (Sandbox Code Playgroud)
没有.它失败并出现"字符串中的无效修饰符"错误.