【问题标题】:rabbitmq multiple consumer and multiple publisherrabbitmq 多消费者和多发布者
【发布时间】:2010-12-05 08:21:56
【问题描述】:

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

消费者从队列中挑选任何无人参与的消息,这样一次有多个消费者在消费队列中的消息?

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

【问题讨论】:

    标签: rabbitmq


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      1. 多个发布者

        为了向rabbitmq发布消息,你需要声明一个工厂并连接到rabbitmq服务器。 然后将 chennel 发送给 rabbitmq

        ConnectionFactory FACTORY = new ConnectionFactory
        

        FACTORY.setUsername(“客人”)

        FACTORY.setPassword(“客人”)

        FACTORY.setVirtualHost("\")

        工厂.setPort (5572)

        FACTORY.setHost(“本地主机”)

        连接连接=FACTORY.newConnection 频道channel = connection.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)
      

      像这样你可以使用来自第一个队列的消息 第二个队列也是如此,但将路由键指定为“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)
      

      【讨论】: