c# - 易网Q。高级 API - 发布不会在 RabbitServer 上产生响应

标签 c# .net rabbitmq easynetq

将 EasyNetQ 视为我们当前用于 MQ 通信的库的替代品。

为了测试,我尝试使用自定义命名策略简单地将一些消息发布到交换器。 我的发布方法在下面的小测试方法中>

public void PublishTest()
{
    var advancedBus = RabbitHutch.CreateBus("host=localhost;virtualHost=Test;username=guest;password=guest;").Advanced;
    var routingKey = "SimpleMessage";

    // declare some objects
    var queue = advancedBus.QueueDeclare("Q.TestQueue.SimpleMessage");
    var exchange = advancedBus.ExchangeDeclare("E.TestExchange.SimpleMessage", ExchangeType.Direct);
    var binding = advancedBus.Bind(exchange, queue, routingKey);

    var message = new SimpleMessage() {Test = "HELLO"};
    for (int i = 0; i < 100; i++)
    {
        advancedBus.Publish(exchange, routingKey, true, true, new Message<SimpleMessage>(message));
    }
    advancedBus.Dispose();
}

问题是,即使创建了 Exchange 和 Queue 并正确绑定(bind),发布也不会产生任何结果。 没有消息进入队列。 Rabbit MQ 管理界面中的图形甚至没有显示交换上的任何事件。 我在这里错过了什么吗?代码基本上直接取自文档。

如果我使用简单的总线并且只是简单地发布,则会创建一个交换,我可以通过管理界面看到消息正在发布。 由于简单总线使用高级 API 进行发布,我认为这是我遗漏的设置问题。

我希望有人能带来一些见解:-)

/托马斯

最佳答案

我终于找到了导致问题的原因。 事实证明,将参数:immediate 设置为true 会导致系统抛出异常。 RabbitMQ 客户端显然不再支持这些参数,请参阅此处的讨论:https://github.com/mikehadlow/EasyNetQ/issues/112

所以下面的代码工作得很好,在 publish 方法中标记从 true 到 false 的变化:

public void PublishTest()
{
    var advancedBus = RabbitHutch.CreateBus("host=localhost;virtualHost=Test;username=guest;password=guest;").Advanced;
    var routingKey = "SimpleMessage";

    // declare some objects
    var queue = advancedBus.QueueDeclare("Q.TestQueue.SimpleMessage");
    var exchange = advancedBus.ExchangeDeclare("E.TestExchange.SimpleMessage", ExchangeType.Direct);
    var binding = advancedBus.Bind(exchange, queue, routingKey);

    var message = new SimpleMessage() {Test = "HELLO"};
    for (int i = 0; i < 100; i++)
    {
        advancedBus.Publish(exchange, routingKey, true, false, new Message<SimpleMessage>(message));
    }
    advancedBus.Dispose();
}

关于c# - 易网Q。高级 API - 发布不会在 RabbitServer 上产生响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21954867/

相关文章:

c# - 500 内部 : Multiple actions were found that match the request

.net - 如何不为种子实体设置 DatabaseGenerateOption.Identity

c# - 使用 "clear"方法与新对象

python - rabbitmq集群管理员是谁?如何从集群中获取数据?

C# - 为什么使用 EventHandler<T> 会出现错误?

c# - 在 ASP.NET Core 2.0 中获取 AuthenticationInfo

c# - 检查密码是否包含字母数字和特殊字符

c# - 如何在 C# 中使用 ATD 命令 GSM 调制解调器获取用户响应

django - 无法连接到 amqp ://guest:**@127. 0.0.1:5672//: [Errno 111] 连接被拒绝

node.js - 如何配置、运行、监控和管理多个不同的 Node 服务?