2009-03-20 4 views
0

J'ai installé la version M4 du courtier Java Apache Qpid sur une boîte Windows et l'ai démarrée en utilisant la configuration prête à l'emploi (via le serveur qpid script .bat).Le client RabbitMQ C# ne parle pas à Apache Qpid Java Broker

J'essaie maintenant de publier un message dans une file d'attente en utilisant la bibliothèque client RabbitMQ C# (version 1.5.3, compilée pour .NET 3.0); mon code est:

public void PublishMessage(string message) 
{ 
    ConnectionFactory factory = new ConnectionFactory(); 
    factory.Parameters.VirtualHost = "..."; 
    IProtocol protocol = Protocols.FromEnvironment(); 
    using (IConnection conn = factory.CreateConnection(protocol, "localhost", 5672)) 
    { 
     using (IModel ch = conn.CreateModel()) 
     { 
      string exchange = "..."; 
      string routingKey = "..."; 
      ch.BasicPublish(exchange, routingKey, null, Encoding.UTF8.GetBytes(message)); 
     } 
    } 
} 

Fondamentalement, je ne suis pas sûr que les valeurs à utiliser pour factory.Parameters.VirtualHost et les chaînes exchange et routingKey. J'ai essayé différentes combinaisons, mais rien ne semble fonctionner - le plus proche que j'ai est de voir ce qui suit dans le journal du serveur Qpid:

2009-03-19 17:11:04,248 WARN [pool-1-thread-1] queue.IncomingMessage (IncomingMessage.java:198) - MESSAGE DISCARDED: No routes for message - Message[(HC:896033 ID:1 Ref:1)]: 1; ref count: 1 

qui semble que le serveur Qpid reçoit le message, mais doesn Je ne sais pas quoi en faire.

Tout conseil sur les valeurs de configuration dont j'ai besoin dans mon code client (en gardant à l'esprit que j'utilise la configuration Qpid par défaut dans virtualhosts.xml) serait très apprécié. Des informations plus générales sur les hôtes virtuels, les échanges, les files d'attente et les clés de routage, et comment Qpid les relie tous ensemble, seraient également très utiles.

Nous vous remercions à l'avance,

Alan

Répondre

6

Juste pour référence, j'ai réussi à obtenir ce travail à la fin. Le code ci-dessous envoie un message à la file d'attente de test dans l'échange test.direct sur l'hôte virtuel localhost (qui fait partie de la configuration par défaut du courtier Qpid):

public void PublishMessage(string message) 
{ 
    ConnectionFactory factory = new ConnectionFactory(); 
    factory.Parameters.VirtualHost = "/localhost"; 
    IProtocol protocol = Protocols.AMQP_0_8_QPID; 
    using (IConnection conn = factory.CreateConnection(protocol, "localhost", 5672)) 
    { 
     using (IModel ch = conn.CreateModel()) 
     { 
      ch.ExchangeDeclare("test.direct", "direct"); 
      ch.QueueDeclare("test-queue"); 
      ch.QueueBind("test-queue", "test.direct", "TEST", false, null); 
      ch.BasicPublish("test.direct", "TEST", null, Encoding.UTF8.GetBytes(message)); 
     } 
    } 
} 
Questions connexes