rabbitmq多个使用者和多个发布者

dy1byipe  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(2)|浏览(172)

想知道rabbitmq的多个发布者和消费者的行为。rabbitmq服务器是否一次给一个消费者一条消息,而其他消费者在那个时候是理想的?

使用者从队列中挑选任何无人参与的消息,以便同时有多个使用者使用队列中的消息?
基本上,我正在设计一个数据库队列,并且不希望一次插入多个数据。

cwxwcias

cwxwcias1#

队列中的消息将只传递给一个使用者。即:一旦消息到达队列-它将不会被复制(广播)到多个使用者。
如果你想做广播-你必须使用多个队列。
有关详细信息,请参阅本教程:http://www.rabbitmq.com/tutorial-two-python.html

mepcadol

mepcadol2#

是,RabitMQ支持多个发布者和使用者。
1.多个发布者
为了发布一个消息到rabbitmq,你需要声明一个工厂并连接到rabbitmq服务器。

ConnectionFactory FACTORY = new ConnectionFactory

FACTORY. set用户名(“访客”)
FACTORY. set密码(“访客”)
设置虚拟主机(“\”)
出厂设置端口(5572)
设置主机(“本地主机”)
连接连接=FACTORY.newConnection通道通道=连接.createChannel
路由消息基本关键字是路由关键字

channel.basicPublish(EXCHANGE_NAME, "Queue1", MessageProperties.PERSISTENT_TEXT_PLAIN, "msg1".getBytes)

channel.basicPublish(EXCHANGE_NAME, "Queue2", MessageProperties.PERSISTENT_TEXT_PLAIN, "msg2".getBytes)

这两个消息将按照路由关键字发布到单独的队列,如queue1和queue2所示
2.多个消费者
对于多个消费者,我们声明一个队列并绑定到一个特定的路由关键字,该路由关键字的消息将被发布到相应的队列。

channel.exchangeDeclare(EXCHANGE_NAME, "direct", durable)
  channel.queueDeclare("q1", durable, false, false, null)
  channel queueBind ("q1", EXCHANGE_NAME,"queue1")// routing key = "queue1"
  val q1Consumer = new QueueingConsumer(channel)
  channel basicConsume ("q1", false, q1Consumer)

这样,u可以使用来自第一队列的消息,同样的,第二队列也可以使用,但是将路由关键字指定为“queue2”

channel.exchangeDeclare(EXCHANGE_NAME, "direct", durable)
      channel.queueDeclare("q2", durable, false, false, null)
      channel queueBind ("q2", EXCHANGE_NAME,"queue2") // routing key = "queue2"
      val q2Consumer = new QueueingConsumer(channel)
      channel basicConsume ("q2", false, q2Consumer)

相关问题