2016-12-22 57 views
2

我是RabbitMQ的新手。RabbitMQ:我可以獲得最新的n條消息嗎?

我使用tyrus實現了websocket服務器,以便像Push Server一樣實時獲取消息,書籍爲RabbitMQ essentials

但是,當我斷開連接並重新連接時,服務器發送所有消息 因爲我這樣實現。

consumer = new DefaultConsumer(channel) 
{ 
    @Override 
    public void handleDelivery(final String consumerTag, 
        final Envelope envelope, 
        final BasicProperties properties, 
        final byte[] body) throws IOException 
    { 
    handler.handleDelivery(channel, envelope, properties, body); 
    } 

}; 

所以,我想20個最新消息,當用戶請求(如滾動), 但是,說實話,我無法想象如何實現它。

我想實現這些東西。

  1. 當用戶連接到websocket服務器時,服務器發送最新的20條消息。

  2. 當用戶打開收件箱佈局併到達滾動底部時,服務器會發送下20條消息。

  3. 此用戶連接的新消息, 然後服務器實時發送。

回答

1

您需要使用預取計數來限制客戶啓動時消耗的未確認消息。

您可以在您的頻道上使用basicQos方法。 從RabbitMQ的文檔:

Channel channel = ...; 
Consumer consumer = ...; 
channel.basicQos(20); // Per consumer limit 
channel.basicConsume("my-queue", false, consumer); 

參見RabbitMQ的文檔的更多細節:http://www.rabbitmq.com/consumer-prefetch.html

+0

感謝你的答案阿加瓦爾。但隊列消息將從第一條消息中消耗,對吧?如果我想從最新消息中消費,那我該怎麼辦呢? –

+1

如果我理解正確,則需要LIFO行爲QUEUE。我擔心,AMQP本身不提供這樣的實施:http://rabbitmq.1065348.n5.nabble.com/LIFO-queue-td18860.html –

相關問題