想知道rabbitmq多个发布者和消费者的行为。 rabbitmq服务器是否一次向任何一个消费者发送一条消息,而其他消费者当时是理想的消息?
OR
消费者从队列中选择任何无人参与的消息,以便一次有多个消费者从队列中消费消息?
基本上我正在设计一个数据库队列,并且一次不需要多个插入。
答案 0 :(得分:0)
来自队列的消息将仅传递给一个消费者。即:一旦消息进入队列 - 它将不会被复制(广播)给多个消费者。
如果你想做广播 - 你必须使用多个队列。
有关详细信息,请参阅本教程: http://www.rabbitmq.com/tutorial-two-python.html
答案 1 :(得分:-1)
是的,RabitMQ支持多个发布者和消费者。
多个发布商
为了向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
路由消息的基本密钥是路由密钥
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)