rabbitmq многократный потребитель и многократный издатель - PullRequest
0 голосов
/ 05 декабря 2010

Хотите узнать поведение rabbitmq нескольких издателей и потребителей. Предоставляет ли сервер rabbitmq одно сообщение какому-либо одному потребителю за раз, а другие потребители в это время идеальны?

OR

Потребители выбирают любое сообщение, оставленное без присмотра, из очереди, так что одновременно более одного потребителя потребляют сообщение из очереди?

По сути, я проектирую очередь базы данных и не хочу, чтобы по одной вставке одновременно.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2010

Да, RabitMQ поддерживает несколько издателей и потребителей.

  1. Несколько издателей

    Для публикации сообщения на rabbitmq вам необходимо объявить фабрику и установить соединение с сервером 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)
0 голосов
/ 06 декабря 2010

Сообщение из очереди будет доставлено только одному потребителю. То есть: как только сообщение попадает в очередь - оно не будет скопировано (передано) нескольким потребителям.

Если вы хотите сделать трансляцию - вы должны использовать несколько очередей.

Смотрите этот урок для более подробной информации: http://www.rabbitmq.com/tutorial-two-python.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...