Клиент RabbitMQ C # не общается с Apache Qpid Java Broker - PullRequest
0 голосов
/ 20 марта 2009

Я установил M4-версию Java-брокера Apache Qpid на Windows и запустил его, используя готовую конфигурацию (с помощью сценария qpid-server.bat).

Я сейчас пытаюсь опубликовать сообщение в очереди, используя клиентскую библиотеку RabbitMQ C # (версия 1.5.3, скомпилированная для .NET 3.0); мой код:

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

По сути, я не уверен, какие значения использовать для factory.Parameters.VirtualHost и строк exchange и routingKey. Я пробовал различные комбинации, но, похоже, ничего не работает - ближе всего я вижу следующее в журнале сервера 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

, который выглядит так, как будто сервер Qpid получает сообщение, но не знает, что с ним делать.

Буду очень признателен за любые советы о том, какие значения конфигурации мне нужны в моем клиентском коде (учитывая, что я использую конфигурацию Qpid по умолчанию в virtualhosts.xml). Также была бы очень полезна более общая информация о виртуальных хостах, обменах, очередях и ключах маршрутизации, а также о том, как Qpid связывает их все вместе.

Заранее спасибо,

Alan

1 Ответ

6 голосов
/ 23 марта 2009

Просто для справки, мне удалось заставить это работать в конце концов. Приведенный ниже код отправляет сообщение в очередь test-queue в обмене test.direct на виртуальном хосте localhost (все является частью конфигурации посредника 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));
        }
    }
}
...