2010-12-05 2 views
0

Voulez-vous connaître le comportement des rabbitmq multiples éditeurs et consommateurs. Est-ce que le serveur rabbitmq donne un message à l'un des consommateurs à la fois et que les autres consommateurs sont idéaux à ce moment-là?rabbitmq consommateurs multiples et multiples éditeur

OU

Les consommateurs ramasser tout message sans surveillance de file d'attente, de sorte que à la fois, plus d'un consommateur consomment le message de file d'attente?

Fondamentalement, je suis la conception d'une file d'attente de base de données et ne veulent pas plus d'un inserts à la fois.

Répondre

0

Un message de la file d'attente seront livrés à un consommateur seulement. C'est-à-dire: une fois que le message arrive dans la file d'attente - il ne sera pas copié (diffusé) à plusieurs consommateurs.

Si vous voulez faire diffusion - vous devez utiliser plusieurs files d'attente.

Voir ce tutoriel pour plus de détails: http://www.rabbitmq.com/tutorial-two-python.html

-1

oui, RabitMQ soutient l'éditeur multiple et consommateurs.

  1. Editeur Multiple

    Pour la publication d'un messsge à rabbitmqyou besoin de déclarer une usine et faire une connexion au serveur rabbitmq. DeCare alors un Chennel à rabbitmq

    ConnectionFactory FACTORY = new ConnectionFactory 
    

    FACTORY.setUsername ("guest")

    FACTORY.setPassword ("guest")

    FACTORY.setVirtualHost ("\")

    FACTORY.setPort (5572)

    FACTORY.setHost ("localhost")

    Connexion Connexion = FACTORY.newConnection canal canal = connection.createChannel

la clé de base pour acheminer un message est une clé de routage

channel.basicPublish(EXCHANGE_NAME, "Queue1", MessageProperties.PERSISTENT_TEXT_PLAIN, "msg1".getBytes) 

channel.basicPublish(EXCHANGE_NAME, "Queue2", MessageProperties.PERSISTENT_TEXT_PLAIN, "msg2".getBytes) 

ces deux messages seront publiés dans une file d'attente séparée par la clé de routage mention queue1 et queue2

2.Multiple Consumer

multi En cas de besoin, nous déclarons une file d'attente et nous lions à une clé de routage particulière le message à cette clé de routage sera publié dans la file d'attente respectée.

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) 

comme ceci u peut consommer des messages de première file d'attente et en va de même pour la deuxième file d'attente mais spécifier la clé de routage en tant que « 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)