【发布时间】:2010-12-05 08:21:56
【问题描述】:
想知道rabbitmq多个发布者和消费者的行为。 rabbitmq 服务器是否一次向任何一个消费者发送一条消息,而其他消费者当时是理想的?
或
消费者从队列中挑选任何无人参与的消息,这样一次有多个消费者在消费队列中的消息?
基本上我正在设计一个数据库队列,并且一次不希望插入多个。
【问题讨论】:
标签: rabbitmq
想知道rabbitmq多个发布者和消费者的行为。 rabbitmq 服务器是否一次向任何一个消费者发送一条消息,而其他消费者当时是理想的?
或
消费者从队列中挑选任何无人参与的消息,这样一次有多个消费者在消费队列中的消息?
基本上我正在设计一个数据库队列,并且一次不希望插入多个。
【问题讨论】:
标签: rabbitmq
队列中的消息将仅传递给一个消费者。即:一旦消息进入队列 - 它不会被复制(广播)给多个消费者。
如果你想进行广播 - 你必须使用多个队列。
有关详细信息,请参阅本教程: http://www.rabbitmq.com/tutorial-two-python.html
【讨论】:
是的,RabitMQ 支持多个发布者和消费者。
多个发布者
为了向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)
【讨论】: