发布网友 发布时间:2022-03-26 08:21
共2个回答
懂视网 时间:2022-03-26 12:43
rabbitmq的工作模式有:
1、简单模式:一个生产者,一个消费者。
2、work模式:一个生产者,多个消费者,每个消费者获取到的消息唯一。
3、订阅模式:一个生产者发送的消息会被多个消费者获取。
4、路由模式:发送消息到交换机并且要指定路由key ,消费者将队列绑定到交换机时需要指定路由key。
5、topic模式:将路由键和某模式进行匹配,此时队列需要绑定在一个模式上,“#”匹配一个词或多个词,“*”只匹配一个词。
6、heard模式:和Routing模式的不同就是取消了routing 使用键值对的方式作为routing。
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ等等。
热心网友 时间:2022-03-26 09:51
1、笨拙点方法,就是轮循,consume的阻塞监听可以设置timeout,通过设置一个较小的timeout,可以轮流监听几个channel,变相实现监听多个queue,对性能要求不是很高,可以使用这种方法2、还有个办法就是先取出一个队列的消息数,然后循环的都读出后,转去读另一个队列,所有队列如果都没有消息了,就这样循环等待着3、还有一个专业人士的回答,但是我还没有完全理解:消费者(consumer)这是个业务层的概念,而消费或者说订阅(也就是 consume)是 AMQP 协议层的东西,所以,你问一个消费者能否订阅多个queue,答案是当然可以。方案也就一种,按照协议的流程分别向不同的 queue 进行 consume。至于是使用多线程方式来处理,还是使用事件驱动的方式(单线程)来处理这就取决于实现了。如果对多线程控制能力不是很强,建议不要用这种方式,太专业了4、这个问题后来我仔细想过,也许可以在应用层进行一下重新设计,可以用线程池作为多个consumer只读取出消息,不进行处理,然后publish进另一个队列,然后用由一个consumer来处理消息