问题
使用MassTransit我看到连接到这样的队列的示例:
var host = x.Host(new Uri("rabbitmq://localhost/Dev_Queue"), h =>
{
h.Username("guest");
h.Password("guest");
});
然而,当我尝试这个时,我不断得到以下异常:
{“Connect failed:guest @ localhost:5672 / Dev_Queue”}
内部消息:
{“AMQP操作被中断:AMQP关闭原因,由Library启动,代码= 541,text = \”Unexpected Exception \“,classId = 0,methodId = 0,cause = System.IO.IOException:Unable从传输连接读取数据:远程主机强制关闭现有连接.---> System.Net.Sockets.SocketException:System.Net上的远程主机强制关闭现有连接\ r \ n System.SNet.Sockets.NetworkStream.Read(Byte []缓冲区,Int32偏移量,Int32大小)\ r \ n ---在RabbitMQ.Client.Impl.SocketFrameHandler.ReadFrame()\ r \的RabbitMQ.Client.Impl.Frame.ReadFrom(NetworkBinaryReader reader)\ r \ n的内部异常堆栈跟踪结束--- \ r \ n n在RabbitMQ.Client.Framing.Imp.Connection.MainLoopIteration()\ r \ n在RabbitMQ.Client.Framing.Impl.Connection.MainLoop()“}
如果我没有指定队列,那么它可以正常工作。
完整配置
这样可行,因为我没有指定队列,只是指定了网址。
var busControl = Bus.Factory.CreateUsingRabbitMq(x =>
{
x.AutoDelete = false;
x.UseJsonSerializer();
x.UseTransaction();
x.ExchangeType = "direct";
x.Durable = true;
var host = x.Host(new Uri("rabbitmq://localhost/"), h =>
{
h.Username("guest");
h.Password("guest");
});
x.UseRetry(Retry.Immediate(2));
});
背景
我们有两台服务器要运行群集以实现高可用性。我能够很好地创建集群,并查看在每个节点上复制的队列。
问题是,这些机器具有共享的“环境”。它们必须共享,因为我们进行蓝/绿部署,而且我们不知道哪些服务器正在生产中。这就是我想要Beta和Production队列的原因,但是,在MassTransit中,我无法成功指向我希望消息进入的特定队列。
对此架构的任何帮助或其他见解将不胜感激。
答案 0 :(得分:1)
使用MassTransit,主机仅指定主机名和虚拟主机名。因此,在上面的示例中,需要存在名为“Dev_Queue”的虚拟主机。显然,这不是你的意图。
在完整的示例中,您需要添加接收端点以接收消息。
var busControl = Bus.Factory.CreateUsingRabbitMq(x =>
{
x.AutoDelete = false;
x.UseJsonSerializer();
x.UseTransaction();
x.ExchangeType = "direct";
x.Durable = true;
var host = x.Host(new Uri("rabbitmq://localhost/"), h =>
{
h.Username("guest");
h.Password("guest");
});
x.UseRetry(Retry.Immediate(2));
x.ReceiveEndpoint("Dev_Queue", e =>
{
e.Consumer(() => new MyConsumer());
})
});
另外,请查看v2中的迁移文档:
http://docs.masstransit-project.com/en/latest/migrating/index.html