java - ActiveMQ - Java - 如何一次接收多条消息?
问题描述
您好我已使用以下代码成功设置了消息侦听器:
消息订阅者.java
public class MessageSubscriber {
@Autowired
MessageReceiver callback;
public void subscribe(String topicName) throws JMSException {
final ActiveMQConnectionFactory connectionFactory =
MqHelper.createActiveMQConnectionFactory(activeMQEndpoint,
activeMQUsername, activeMQPassword);
receiveMessage(connectionFactory, topicName);
}
private void receiveMessage(ActiveMQConnectionFactory connectionFactory, String topicName)
throws JMSException {
final Connection consumerConnection = connectionFactory.createConnection();
final Session consumerSession =
consumerConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
final Destination consumerDestination = consumerSession.createTopic(topicName);
final MessageConsumer consumer = consumerSession.createConsumer(consumerDestination);
consumer.setMessageListener(callback);
consumerConnection.start();
}
}
消息接收器.java
public class MessageReceiver implements MessageListener {
private static Logger logger = LoggerFactory.getLogger(MessageReceiver.class);
@Override
public void onMessage(Message message) {
logger.info("Receiving message!");
// ... I handle the message here
}
}
当我处理消息时,我使用一项服务,我必须稍后再获取结果。这通常需要大约 30-40 秒。这不是问题,问题是一次只处理一条消息。
例如,当 5 条消息发布到一个主题时,1 条消息会进来,我会看到“正在接收消息!” 记录和 30-40 秒,直到它得到响应。只有在处理完成时,我才会看到下一条“正在接收消息!” 日志。这意味着 5 条消息大约需要 3 分钟而不是不到 1 分钟。
编辑:我应该说我正在使用弹簧启动,因此 MessageReceiver 是自动装配的。这意味着它本质上是一个单例,这可能是问题吗?是否有另一种使用 ActiveMQ 的方式可以满足我的需求?
编辑 2: MessageReceiver 不再是 Spring Boot bean 并且每次都被实例化,仍然是同样的问题。
解决方案
推荐阅读
- html - AngularJS - 模态视图不显示
- java - Java包结构约定
- jenkins - Jenkins - 将文件下载到用户的浏览器作为构建后步骤
- eclipse - 如何为 Eclipse Luna 设置 c++11?
- json - Hello World 示例:安装/测试时出现“出现问题”
- android - react native如何检查内部对象是否存在?
- python - 根据可能出现多次的关键字拆分列表
- android - 如何在 Android 中使用 RxJava 响应 body()
- jquery - 未引用的“href”属性被异步加载阻止
- web - Service Worker 发送的重复发布请求