代码之家  ›  专栏  ›  技术社区  ›  atkayla

如何设置RabbitMQ来跨使用者处理同一资源上的异步任务,例如数据库更新?

  •  0
  • atkayla  · 技术社区  · 8 年前

    例如,我们有一个任务队列,它处理一个数字和两个消费者:

                 |-> c1
    [5,4,3,2,1] - 
                 |-> c2
    

    当一条消息被消费时,假设它执行一些异步操作,比如更新数据库中的一个数字。

    my_number_table
    ---
    number(int)
    

    如果消费者1得到任务1并开始更新数据库中的行,而消费者2得到任务2并开始更新数据库中的同一行,数据库不会锁定吗?

    我相信我希望任务2在任务1完成之前不会被任何消费者发现,并且该号码已经成功地保存到数据库中。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Vengatesh Subramaniyan    8 年前
    • 您可以通过为两个消费者创建两个不同的队列来解决您的问题。并将所有相关任务发送到同一队列。还要确保只有一个消费者访问该队列。例如,如果希望task2只在task1之后启动,并向它们发送相同的队列queue1。

    所以根据我的理解,最好将依赖任务发送给同一个消费者。