Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多交换队列模型的RabbitMQ使用者设计_Rabbitmq_Message Queue_Rabbitmq Exchange - Fatal编程技术网

多交换队列模型的RabbitMQ使用者设计

多交换队列模型的RabbitMQ使用者设计,rabbitmq,message-queue,rabbitmq-exchange,Rabbitmq,Message Queue,Rabbitmq Exchange,我有一个RabbitMQ设置,配置如下 每个交换都是扇出式的 连接到每个Exchange的多个队列 阻塞连接由消费者创建 单个使用者处理所有回调 问题- 一些有效负载比其他负载需要更长的处理时间,这导致消费者即使在其他队列中有有效负载时也保持空闲 问题- 我应该如何实现消费者以避免长时间等待?我应该吗 是否为每个模块运行单独的使用者?有用户体验吗 我可以配置RabbitMQ来处理这些情况吗?如果是,怎么办 首先,很高兴知道为什么您有多个扇出交换?你真的需要这个吗?扇出exchange将消息发

我有一个RabbitMQ设置,配置如下

  • 每个交换都是扇出式的
  • 连接到每个Exchange的多个队列
  • 阻塞连接
    由消费者创建
  • 单个使用者处理所有回调
问题-

一些有效负载比其他负载需要更长的处理时间,这导致消费者即使在其他队列中有有效负载时也保持空闲

问题-

  • 我应该如何实现消费者以避免长时间等待?我应该吗 是否为每个模块运行单独的使用者?有用户体验吗
  • 我可以配置RabbitMQ来处理这些情况吗?如果是,怎么办

  • 首先,很高兴知道为什么您有多个扇出交换?你真的需要这个吗?扇出exchange将消息发送到所有队列

  • 只要有更多的消费者。检查
  • 您实际上不需要显式地配置rabbitmq,一切都可以通过客户端(发布者和订阅者)完成,您只需要计算出您需要多少个交换以及它们应该是哪种类型,等等

  • 首先,你用的是什么编程语言?大多数常见语言,如python、java、c#,都支持为并行进程创建额外的线程

    假设您使用以下队列(pseu代码):

    首先,设置“prefetch_count=3”允许您的消费者最多有3条消息同时处于非确认状态

    在回调方法中,您应该启动一个线程,使用线程化的函数来执行每条消息。在函数方法体的末尾,执行以下操作:

    ch.basic_ack(delivery_tag = method.delivery_tag)
    
    因此,最多可以并发处理3条消息,即使其中一个或两个线程运行时间更长,其他线程仍可以处理下一条消息

    ch.basic_ack(delivery_tag = method.delivery_tag)