我正在使用一个套接字IO应用程序,该应用程序使用ActiveMQ队列中的消息。我正在将stomp库用于Node JS
在大多数情况下,它工作正常,但我需要能够重新发送未确认的消息。不会重试已跳过amq.ack(message)的消息,并显示为未决ActiveMQ Web控制台。有什么办法可以重新发送它们?
const subscribeHeaders = {
destination,
ack: 'client-individual'
};
amq.subscribe(subscribeHeaders, (error, message) => {
if (error) {
logger.error(`subscribe error ${error.message}`);
return;
}
message.readString('utf-8', (err, body) => {
if (err) {
logger.error(`read message error ${err.message}`);
return;
}
const notificationData = JSON.parse(body);
const { deviceId } = notificationData;
if (io.sockets.adapter.rooms[deviceId]) {
io.to(deviceId).emit('notification', notificationData);
amq.ack(message);
}
});
});
答案 0 :(得分:1)
如果您不确认消息,则它们将保持待处理状态,直到您确认消息或关闭被锁定的使用者(或连接)为止。在这种情况下,您可以通过取消STOMP取消对该订阅的订阅来释放该消息,并将这些消息重新分发给其他使用者。