rabbitmq - AMQP/RabbitMQ - 如何避免竞争条件

标签 rabbitmq amqp race-condition

我有以下架构:
Architecture

  • 有固定数量的输入源。每个输入源都是等效的。
  • AMQP 代理。在我的情况下,我正在使用 RabbitMQ。
  • 目前,有2个消费者。同样,每个消费者都是等价的。

  • 输入源正在发送要处理的命令。这些命令由代理转发并由两个消费者之一接收。

    我需要以下行为:
  • 如果一个输入源发送多个命令,则所有命令必须依次处理。即在2条命令的例子中,是不允许 消费者 1 正在处理命令 1,同时消费者 2 正在处理命令 2。
  • 但是,可以同时处理源自两个不同输入源的两个命令。

  • 是否可以使用 AMQP/RabbitMQ 强制执行此行为?

    最佳答案

    您可以为每个队列使用一个使用者来涵盖您的场景。
    每个队列可以顺序处理消息。

    另一种方法是只使用一个队列并使用 envelope.getExchange()了解源码,或tag您的消息使用 AMQP.BasicProperties properties
    这样,例如,您可以在多线程中消费消息,并为每个 tag 分配一个线程。

    关于rabbitmq - AMQP/RabbitMQ - 如何避免竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37393740/

    相关文章:

    amazon-ec2 - 与 RabbitMQ 相比,Amazon SQS 的性能较慢

    java - 如何在 Spring AMQP 中监听现有队列?

    RabbitMQ 在第一个消息之后丢弃消息

    java - Spring AMQP Listener Container 中的并发是如何实现的?

    java - Apache Artemis 代理不向 SwiftMQ AMQP 客户端发送消息

    Java 多线程执行受阻

    PHP (Symfony 4) rabbitmq 消费者命令作为守护进程

    rabbitmq - RPC 模型中的correlationId 和临时队列 - AMQP

    go - 拉 0 大小的 golang chan

    python - 在有 GIL 的情况下,您可以在 Python 中竞争条件吗?