- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下问题:
我有一个 RabbitMQ 集群、一个消息生产者和一个消费者集群(用于高可用性)。
每当消费者收到消息时,它就会根据消息内容生成另一个进程并运行它。这个过程很长,大约需要 30 分钟。
我必须确保一次处理一条消息。但是,消费者多于一个,因此如果队列中有 2 条消息,则一个消费者获得一条消息,第二个消费者获得另一条消息,并且它们是并行处理的。
供引用:每个消费者都驻留在不同的机器上。
是否有任何 RabbitMQ 级别的机制可以让我等待消费下一条消息,直到前一条消息被确认?还是我必须在服务器之间开发一些锁定机制?
最佳答案
我只是从rabbitmq 文档中提到我认为能够满足您的要求的几点。
Normally, active consumers connected to a queue receive messages from it in a round-robin fashion. When consumer priorities are in use, messages are delivered round-robin if multiple active consumers exist with the same high priority.
the basic.qos method to allow you to limit the number of unacknowledged messages on a channel (or connection) when consuming
Channel channel = ...;
Consumer consumer = ...;
channel.basicQos(1); // Per consumer limit
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("received message");
// process the message .. time consuming
// after processing send the basic ack so that next message can be received from queue
channel.basicAck(envelope.getDeliveryTag(), false);
};
channel.basicConsume("my-queue", false, consumer);
channel.basicQos(x);
channel.basicQos(x, true);
channel.basicQos(x, true)
)和 channel 内的消费者(使用
channel.basicQos(x, false)
)设置 QOS 限制。限制 0 表示无限制。显然,这些限制适用于 channel 实例。驻留在不同 channel 实例(在同一台机器或不同机器上)的所有消费者都有自己的限制(默认或通过 QOS 方法明确设置)。
关于synchronization - 如何将消费者与rabbitmq同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47678522/
我是一名优秀的程序员,十分优秀!