RabbitMQ StompJs получает только одно сообщение - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь получить сообщение от RabbitMq-Que с плагином Stomp. Это работает нормально, но проблема в том, что я получаю каждое сообщение из очереди. Поэтому, если в очереди 13 сообщений, я получаю 13. Ключ в том, что я просто хочу получить 1 сообщение и после отправки Ack или Nack следующее. Есть ли у кого-нибудь идея, как получить только одно сообщение? Спасибо за помощь.

Вот код, который я получил:

    GetMessage()
  {
    this.GetRabbitMqClient().then((client)=> 
    {

    var headers ={ack:'client', 'x-max-priority': '10'};
    var subscription = client.subscribe("/queue/TestQue",this.messageCallback,headers);    
  });
  }

private messageCallback = function(Message :IMessage)
  {
    console.log(Message.body);
    setTimeout(()=> {Message.ack();},100000000000000);        
  }

 private GetRabbitMqClient( ):Promise<Client> {
    var promise = new Promise<Client>((resolve,reject)=>{
    var client = new Client(
      {
        brokerURL: "ws://localhost:15674/ws",
        connectHeaders:
        {
          login: "guest",
          passcode: "guest"
        },
        // debug: function (str) {
        //   console.log(str);
        // },
        reconnectDelay: 5000,
        heartbeatIncoming: 4000,
        heartbeatOutgoing: 4000
      });

    client.onConnect = function (frame) {   
      resolve(client);
    };

    client.onStompError = function (frame) {
      // Will be invoked in case of error encountered at Broker
      // Bad login/passcode typically will cause an error
      // Complaint brokers will set `message` header with a brief message. Body may contain details.
      // Compliant brokers will terminate the connection after any error
      reject(frame);
      console.log('Broker reported error: ' + frame.headers['message']);
      console.log('Additional details: ' + frame.body);
    };
    client.activate();    
  });
  return promise;
  }

1 Ответ

0 голосов
/ 21 января 2019

Я нашел решение: вам просто нужно установить в заголовках атрибут: 'prefetch-count': '1'

...