c# - RabbitMQ C# 客户端不与 Apache Qpid Java Broker 通信

标签 c# java amqp

我已在 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 配置)将不胜感激。有关虚拟主机、交换器、队列和路由 key 以及 Qpid 如何将它们链接在一起的更多一般信息也将非常有用。

提前谢谢您,

艾伦

最佳答案

仅供引用,我最终成功了。下面的代码向 localhost 虚拟主机上的 test.direct 交换中的队列 test-queue 发送一条消息(默认 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/

相关文章:

c# - 无法使DataGridView与ComboBox下拉菜单一起使用

c# - Controller 映射中的 ASP.NET MVC 枚举参数

java - Spring Boot 和 Docker-compose 设置参数

java - 使用 Step Builder 模式创建包含实例变量(列表)的复杂对象

java - Android 如何获取手机是否从 sleep 模式恢复

hadoop - 使用消息队列的分布式计算 VS Map/Reduce

python - Kombu - 消息发布到 rabbitmq 错误 - TypeError : 'str' object is not callable

c# - 为什么我们需要 C# 属性中的支持字段?

c# - 如何从gridview中获取列名?

java - 独立 Apache Qpid (amqp) Junit 测试示例