我已经在Windows机器上安装了Apache Qpid Java代理的M4版本,并使用现成的配置(通过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以及字符串exchangeroutingKey的值。我已经尝试了各种组合,但是似乎没有任何效果-我最接近的是在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服务器正在接收消息,但不知道如何处理。

关于我在客户端代码中需要什么配置值的任何建议(请记住我正在使用virtualhosts.xml中的默认Qpid配置)。有关虚拟主机,交换机,队列和路由密钥以及Qpid如何将它们全部链接在一起的更多常规信息也将非常有用。

先感谢您,

艾伦

最佳答案

仅供参考,最终我设法使它起作用。以下代码将消息发送到localhost虚拟主机上的test.direct交换中的队列测试队列中的消息(默认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));
        }
    }
}

关于c# - RabbitMQ C#客户端未与Apache Qpid Java Broker对话,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/665746/

10-10 19:38