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

RabbitMQ : Can I get latest n messages?

我是 RabbitMQ 的新手。

我用 tyrus 实现了 websocket 服务器来实时获取消息,就像书 RabbitMQ essentials 中的 Push Server 一样。

但是,当我断开连接并重新连接时,服务器发送所有消息 因为我是这样实现的。

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. 已连接时给该用户的新消息, 然后服务器实时发送。

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

您可以在您的频道上使用 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