gdaws / stompit

STOMP client library for node.js
MIT License
163 stars 36 forks source link

How to send scheduled/delayed message? #97

Closed ron-liu closed 5 years ago

ron-liu commented 5 years ago

Hi, I am trying to send delayed message, but cannot work it out. The following are what I tried: By following: https://github.com/gdaws/node-stomp/issues/16 and https://activemq.apache.org/delay-and-schedule-message-delivery. But the message is not delayed. the code are the below:


const stompit = require('stompit');

const connectOptions = {
  'host': 'activemq',
  'port': 61613,
  'connectHeaders':{
    'host': '/',
    'login': 'username',
    'passcode': 'password',
    'heart-beat': '5000,5000'
  }
};
var connectionManager = new stompit.ConnectFailover([connectOptions])
connectionManager.on('error', function(error) {
  var connectArgs = error.connectArgs;
  var address = connectArgs.host + ':' + connectArgs.port;
  console.log('Could not connect to ' + address + ': ' + error.message);
});

connectionManager.on('connecting', function(connector) {
  console.log('Connecting to ' + connector.serverProperties.remoteAddress.transportPath);
});
const channelPool = stompit.ChannelPool(connectionManager);
channelPool.channel(function(error, channel) {
  if (error) {
    console.log('send-channel error: ' + error.message);
    return;
  }
  channel.send({
    destination: '/queue/test',
    AMQ_SCHEDULED_PERIOD:10000,
    AMQ_SCHEDULED_REPEAT:10,
    AMQ_SCHEDULED_DELAY:10000,
  }, 'hello', function(error) {
    if (error) {
      console.log('send error ' + error.message);
      return;
    }
    console.log('message sent '   );
  });
});

channelPool.channel(function(error, channel) {
  if (error) {
    console.log('subscribe-channel error: ' + error.message);
    return;
  }
  var subscribeHeaders = {
    destination: '/queue/test'
  };
  channel.subscribe(subscribeHeaders, function(error, message, subscription) {
    if (error) {
      console.log('subscribe error: ' + error.message);
      return;
    }
    message.readString('utf8', function(error, body) {
      if (error) {
        console.log('read message error ' + error.message);
        return;
      }
      console.log('received message: ' + body);
      // subscription.unsubscribe();
    });
  });
})
ron-liu commented 5 years ago

Solved. Based on https://activemq.apache.org/delay-and-schedule-message-delivery, need to turn schedulerSupport on in the activemq config file.