首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将RabbitMQ设置为跨使用者处理同一资源上的异步任务?

如何将RabbitMQ设置为跨使用者处理同一资源上的异步任务?
EN

Stack Overflow用户
提问于 2018-10-15 08:29:20
回答 1查看 244关注 0票数 0

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

代码语言:javascript
运行
复制
             |-> c1
[5,4,3,2,1] - 
             |-> c2

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

代码语言:javascript
运行
复制
my_number_table
---
number(int)

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

我希望任务2在任务1完成并将号码成功保存到数据库之前不会被任何客户选择。

EN

回答 1

Stack Overflow用户

发布于 2018-10-16 18:45:45

  • 您可以通过为两个使用者创建两个不同的队列来解决您的问题。并将所有从属任务发送到同一队列。并确保只有一个消费者在访问该队列。例如,如果您希望task2仅在task1之后启动,并向它们发送相同的队列queue1。
  • 您可以通过为两个消费者使用一个队列并获取数据库上的锁来解决问题。但是,您仍然不能保证保持执行顺序。例如,consumer1具有非常高的延迟,而consumer2具有低延迟,因此task2将在task1到达consumer2之前到达consumer1。在consumer1获取锁的时候,consumer2可能已经完成了task2。

因此,根据我的理解,最好将依赖任务发送给相同的使用者。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52808301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档