将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和队列,并且绑定正确,发布也不会产生任何结果。 没有消息到达队列。 Rabbit MQ管理界面中的图形甚至不显示交换上的任何活动。 我错过了什么吗?代码基本上直接来自文档。
如果我使用简单的总线并且只是发布,就会创建一个交换,我可以通过管理界面看到正在发布的消息。 由于简单总线使用高级API发布,我认为这是一个我不知道的设置问题。
我希望有人能带来一些见解: - )
/托马斯
答案 0 :(得分:6)
我终于找到导致问题的原因。 事实证明,将参数:立即设置为 true 会导致系统抛出异常。 RabbitMQ客户端显然不再支持参数,请参阅此处的讨论:https://github.com/mikehadlow/EasyNetQ/issues/112
所以下面的代码工作得很好,在发布方法中标记从 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();
}