我是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条最新消息(如滚动), 但老实说,我无法想象如何实现它。
我想实现这些东西。
当用户连接到websocket服务器时,服务器会发送最新的20条消息。
当用户打开收件箱布局并到达滚动底部时,服务器会发送下20封邮件。
连接后此用户的新消息, 然后服务器实时发送。
答案 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