rabbitmq多个消费者和多个发布者

时间:2010-12-05 08:21:56

标签: rabbitmq

想知道rabbitmq多个发布者和消费者的行为。 rabbitmq服务器是否一次向任何一个消费者发送一条消息,而其他消费者当时是理想的消息?

OR

消费者从队列中选择任何无人参与的消息,以便一次有多个消费者从队列中消费消息?

基本上我正在设计一个数据库队列,并且一次不需要多个插入。

2 个答案:

答案 0 :(得分:0)

来自队列的消息将仅传递给一个消费者。即:一旦消息进入队列 - 它将不会被复制(广播)给多个消费者。

如果你想做广播 - 你必须使用多个队列。

有关详细信息,请参阅本教程:    http://www.rabbitmq.com/tutorial-two-python.html

答案 1 :(得分:-1)

是的,RabitMQ支持多个发布者和消费者。

  1. 多个发布商

    为了向rabbitmqyou发布一个消息,需要声明一个工厂并与rabbitmq服务器建立连接。 然后将一个chennel称为rabbitmq

    ConnectionFactory FACTORY = new ConnectionFactory
    

    FACTORY.setUsername(“guest”)

    FACTORY.setPassword(“guest”)

    FACTORY.setVirtualHost(“\”)

    FACTORY.setPort(5572)

    FACTORY.setHost(“localhost”)

    连接连接= FACTORY.newConnection     渠道渠道= connection.createChannel

  2. 路由消息的基本密钥是路由密钥

    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)
    
    像这样,你可以使用来自第一个队列的消息 同样适用于第二个队列,但将路由密钥指定为“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)