如何实现消费者和生产者之间的快速和慢速工作人员之间的通信?
Posted
技术标签:
【中文标题】如何实现消费者和生产者之间的快速和慢速工作人员之间的通信?【英文标题】:How to implement communication between consumer and producer with fast and slow workers? 【发布时间】:2019-05-30 08:59:30 【问题描述】:我正在寻找适合我的情况的模式和现有实现: 我有使用 REST API 的同步 soa,实际上我用 REST 实现了远程过程调用。而且我有一些处理请求很慢的工作人员(大约 30 秒),并且由于某些请求的某些许可限制,我只能按顺序处理它们(请参阅system setup)。
对于这种情况,有哪些推荐的沟通方式?
当消费者位于防火墙后面并且我无法轻松地向他发送有关已完成任务的通知并且如果我有消息代理可能无法让消费者使用我的消息代理时,我该如何混合同步和异步通信?
Worker 使用 Flask 和 gunicorn 在 Python 中实现。目前我正在使用同步 REST 接口并允许延迟,因为我只有快速的工作人员。我查看了 Kafka 和 RabbitMq,它们适合后端 通信,但是生产者如何与消费者通信?
如果消费者触发 API 请求,我的生产者可以返回代码 202,那么生产者应如何通知消费者结果可用?消费者是否必须轮询生产者以获得结果?
另外,如果我使用消息代理并且我的网关代表消费者行事,它应该有一个请求注册表(我现在已经为每个请求提供了 GUID)和结果,你会推荐哪种方法来实现它?
【问题讨论】:
【参考方案1】:Producer- 产生消息的代理 Consumer - 可以处理消息并实现处理消息的逻辑的代理
【讨论】:
谢谢你的建议,基本上你建议实现轮询机制。是否有更好的替代方案,如 websockets 来通知结果?你能指出一些项目@github 吗? 轮询比 websockets 更容易实现,并且只涉及 REST API 开发工作。话虽如此,使用 websockets 或 gRPC 将是理想的。 github.com/vinta/awesome-python#websocketmedium.com/@martin.sikora/…以上是关于如何实现消费者和生产者之间的快速和慢速工作人员之间的通信?的主要内容,如果未能解决你的问题,请参考以下文章
RabbitMQ:如何在 Python 生产者和消费者之间发送 Python 字典?