如何重新发送未确认的ActiveMQ消息?

时间:2019-07-17 09:11:19

标签: node.js socket.io activemq

我正在使用一个套接字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);
        }
    });
});

1 个答案:

答案 0 :(得分:1)

如果您不确认消息,则它们将保持待处理状态,直到您确认消息或关闭被锁定的使用者(或连接)为止。在这种情况下,您可以通过取消STOMP取消对该订阅的订阅来释放该消息,并将这些消息重新分发给其他使用者。