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 条最新消息,
但是,老实说,我无法想象如何实现它。
我想实现这些东西。
当用户连接到 websocket 服务器时,服务器发送最新的 20 条消息。
当用户打开收件箱布局并到达滚动底部时,服务器将发送接下来的 20 条消息。
已连接时给该用户的新消息,
然后服务器实时发送。
您需要使用预取计数来限制在您的消费者启动时使用未确认的消息。
您可以在您的频道上使用 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
我是 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 条最新消息, 但是,老实说,我无法想象如何实现它。
我想实现这些东西。
当用户连接到 websocket 服务器时,服务器发送最新的 20 条消息。
当用户打开收件箱布局并到达滚动底部时,服务器将发送接下来的 20 条消息。
已连接时给该用户的新消息, 然后服务器实时发送。
您需要使用预取计数来限制在您的消费者启动时使用未确认的消息。
您可以在您的频道上使用 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