Domanda

Ho installato il rilascio M4 del broker Apache Qpid Java su una macchina Windows, e ha iniziato utilizzando la configurazione out-of-the-box (tramite lo script Qpid-server.bat).

Ora sto cercando di pubblicare un messaggio a una coda utilizzando la libreria client # RabbitMQ C (versione 1.5.3, compilato per .NET 3.0); il mio codice è:

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));
        }
    }
}

In sostanza, io sono sicuro che cosa valori da utilizzare per factory.Parameters.VirtualHost e le stringhe exchange e routingKey. Ho provato varie combinazioni, ma nulla sembra funzionare - la più vicina che ho è vedere quanto segue nel registro del server 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

che appare come se il server Qpid sta ricevendo il messaggio, ma non sa cosa fare con esso.

Qualche consiglio su quali valori di configurazione ho bisogno nel mio codice cliente (tenendo a mente che sto utilizzando la configurazione di default in Qpid virtualhosts.xml) sarebbe molto apprezzato. informazioni più generali sul virtual host, gli scambi, le code e le chiavi di routing, e come Qpid li lega insieme, sarebbe anche molto utile.

Grazie in anticipo,

Alan

È stato utile?

Soluzione

Solo per riferimento, sono riuscito a ottenere questo lavoro alla fine. Il codice di seguito invia un messaggio alla coda test-coda nel cambio test.direct sull'host localhost virtuale (tutta la parte della configurazione di mediatore Qpid predefinita):

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));
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top