我正在尝试使用 C# 中的 EasynetQ lib 创建 RabitMQ 消息传递的基本示例。 当我在本地主机上执行此操作时,它工作正常,但是当我尝试连接到另一台计算机上的rabbitmq服务器时,我在调用订阅方法时收到任务取消异常。 我正在使用 .net 7.0 和 easynetQ 7.5.5 这是我的发布者代码:
using EasyNetQ;
using RabbitMQLearning.Shared.Messages;
var counter = 0;
using var bus = RabbitHutch.CreateBus("host=webdev;port=5672;username=usr;password=pwd");
var Timer = new Timer(PublishMessage, state:null,dueTime:0,period: (int) new TimeSpan(0,0,1).TotalMilliseconds);
await Task.Delay(Timeout.Infinite);
void PublishMessage(object state)
{
var message = new BasicMessage {
Id= counter,
Text = $"Hello {counter} from the rabbit hole"
};
bus.PubSub.Publish(message);
Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss:fff")} Message {counter} sent");
counter++;
}
订户:
using EasyNetQ;
using RabbitMQLearning.Shared.Messages;
using var bus = RabbitHutch.CreateBus("host=webdev;port=5672;username=usr;password=pwdx");
bus.PubSub.Subscribe<BasicMessage>("MadHatter", SubscribeMessage);
Console.WriteLine("subscribed");
await Task.Delay(Timeout.Infinite);
Task SubscribeMessage(BasicMessage message) {
Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss:fff")} {message.Id} heard");
return Task.CompletedTask;
}
和消息对象:
namespace RabbitMQLearning.Shared.Messages {
public class BasicMessage {
public int Id { get; set; }
public string Text { get; set; }
}
}
几秒钟后,我在
subscribe<BasicMessage>
调用中收到 TaskCanceledException。
订阅控制台消息根本没有被点击
我在这里缺少什么?
好吧,这是一个愚蠢的 bannapeel,它无法解析连接字符串中的服务器名称。如果我在主机部分使用 FQDN 或 IP 地址,那么它就可以正常工作。