Celery跨语言的问题(Go 、RabbitMQ、Celery、Python)

  |   0 评论   |   577 浏览

Celery跨语言的问题(Go 、RabbitMQ、Celery、Python)

  1. Go服务端作为生产者生产消息到mq

  2. celery 启动worker 来消费 mq的消息

  3. 这样的话,序列化方式和celery自带的几种不支持,也就是Go生产的消息,不符合celery消费消息的数据格式

  4. 怎样做才能解决这个问题?

解决方式1(待验证)

  1. 构造相同的数据格式,https://github.com/gocelery/gocelery#gocelery-client-example

  2. 和python配置相同的celery配置,使用配置去接受任务的结果 backend

  3. gocelery 生产消息,python celery work 消费消息做处理,把结果写入backend,gocelery 从backend取数

image.png

解决方式2(可实现)

  1. flask API(接受消息,直接存入mq里[celery序列化的数据格式] 此API只做 tasks.*.apply_async() / delay......),api直接将消息存到mq,直接返回给调用端200

  2. celery worker 消费 步骤1 生产的消息

这样做的好处?

  1. celery worker 可以动态增加,当mq有消息堆积的时候,扩展worker就ok

  2. celery 可以延迟处理,队列优先级

  3. celery 可以限速

  4. celery 可以定义工作流

  5. flower 可以进行监控


标题:Celery跨语言的问题(Go 、RabbitMQ、Celery、Python)
作者:lishulongVI
地址:https://blog.thinking.mobi/articles/2020/03/06/1583496791208.html

评论

发表评论