java - 同步发送 JMS 消息
问题描述
假设我有一个非常简单的带有消息生产者的 JMS 设置
@Stateless
public class MessageProducer {
@Inject
private JMSContext context;
@Resource(mappedName = "java:global/jms/MyFirstJmsQueue")
private Destination myFirstJmsQueue;
public void sendMessage(String messageToSend) {
this.context.createProducer().send(this.myFirstJmsQueue, messageToSend);
System.out.println("SEND MESSAGE: " + messageToSend);
}
}
和消息消费者:
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destination", propertyValue = "java:global/jms/MyFirstJmsQueue")})
public class MessageConsumer implements MessageListener {
@Override
public void onMessage(Message message) {
try {
System.out.println("RECEIVED MESSAGE: " + message.getBody(String.class));
} catch (final JMSException e) {
e.printStackTrace();
}
}
}
现在一切都很好。成品应该与队列异步工作。
但测试不应该。为了测试设置是否正常工作,我需要测试来配置这些类以同步工作。
或者,这些类可以保持异步,但测试需要添加一些“等到所有消息都发送完毕”的内容。
JMS 是否可以使用这些选项中的任何一个?
笔记:
- 有趣的是,我发现
JMSProducer#setAsync
JavaDoc 说“默认情况下调用发送是同步的。”。这显然并不意味着接收消息也是同步的。 JMSContext.createConsumer(this.myFirstJmsQueue).receive()
也不理想,因为我无法测试我的设置,但如果 JMS 有效
解决方案
推荐阅读
- python - 未从单独文件导入的类实例的属性
- javascript - ReactJS App 给出找不到模块'webpack' [ReactJS app in cjs/loader.js] --
- java - 在Java中将表数据读入二维数组
- java - 使用线程从文件进行 Java 复杂计算(并发)
- php - Laravel 布尔值在查询中返回“1”/“0”而不是 true/false
- python - 连接具有多个“记录”维度的 netcdf 文件
- c++ - 如何修复初学者 C++ 代码中发生的未定义行为?
- javascript - querySelectorAll 获得的项目少于页面上的项目
- html - 如何实现 Angular 2+ 步骤进度条
- python - 在 pandas 数据框中拆垛并绘制结果