有什么方法可以确保 JMS 事件发生或告诉 JMS 事件在特定时间开始和完成?
Any way to ensure JMS eventing occurs or to tell JMS eventing to start and complete at a certain time?
我是 运行 在一个使用 CDI 和 JMS 的 EAR 文件中使用 Arquillian 的集成测试,我依赖于集成测试的 JMS 事件结果。我发现我无法控制 JMS 事件发生的时间。有时,JMS 事件发生在特定测试开始之前,这是我想要的结果。但有时我发现 JMS 事件发生在测试之后。有没有办法告诉 JMS 它应该在特定时间开始或在特定时间完成?有什么方法可以询问 JMS 是否发生了特定事件?有什么方法可以告诉 Arquillian 中的测试在开始之前等待 JMS 完成吗?
没有
本质上,您所要求的是采用异步技术的同步行为。
我认为我从未在 JMS 规范中看到过保证及时性,因此虽然消息将被传递,但它取决于 JMS 提供者和接收消息的侦听器何时实际发生。
就尝试在特定时间完成而言,在传递邮件后,由您的处理来确定处理的时间有多短或多长时间。除了你自己的超时逻辑,JMS 本身是不会做的。
我会问一个真正的基本问题:JMS 真的是适合您要做的事情的正确技术吗?
我解决问题的方法是在发送我的 JMS 事件后添加以下调用:
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
使用上面的代码,JMS 事件能够在下一个测试开始之前完成。这始终如一。
我是 运行 在一个使用 CDI 和 JMS 的 EAR 文件中使用 Arquillian 的集成测试,我依赖于集成测试的 JMS 事件结果。我发现我无法控制 JMS 事件发生的时间。有时,JMS 事件发生在特定测试开始之前,这是我想要的结果。但有时我发现 JMS 事件发生在测试之后。有没有办法告诉 JMS 它应该在特定时间开始或在特定时间完成?有什么方法可以询问 JMS 是否发生了特定事件?有什么方法可以告诉 Arquillian 中的测试在开始之前等待 JMS 完成吗?
没有
本质上,您所要求的是采用异步技术的同步行为。
我认为我从未在 JMS 规范中看到过保证及时性,因此虽然消息将被传递,但它取决于 JMS 提供者和接收消息的侦听器何时实际发生。
就尝试在特定时间完成而言,在传递邮件后,由您的处理来确定处理的时间有多短或多长时间。除了你自己的超时逻辑,JMS 本身是不会做的。
我会问一个真正的基本问题:JMS 真的是适合您要做的事情的正确技术吗?
我解决问题的方法是在发送我的 JMS 事件后添加以下调用:
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
使用上面的代码,JMS 事件能够在下一个测试开始之前完成。这始终如一。