RabbitMQ:我可以获得最新的n条消息吗?

时间:2016-12-22 17:19:23

标签: rabbitmq messagebroker

我是RabbitMQ的新手。

我使用tyrus实现了websocket服务器,以便像推送服务器一样实时发送消息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 个答案:

答案 0 :(得分:1)

您需要使用预取计数来限制消费者启动时消费未确认的消息。

您可以在频道上使用basicQos方法。 来自RabbitMQ docs:

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

请参阅RabbitMQ文档以获取更多详细信息:http://www.rabbitmq.com/consumer-prefetch.html