Я использую очень простой пример для тестирования моего соединения MassTransit с rabbitMq через C #. Всякий раз, когда я запускаю этот код для подключения к моей конечной точке rabbitMq, он прекрасно работает всякий раз, когда в качестве разрешения устанавливается подстановочный знак. Однако, когда я добавляю разрешения в администраторе rabbitMq, чтобы разрешить этому пользователю доступ только к событию test
, этот код завершится ошибкой.
По какой-то причине он сначала попытается подключиться к обменному имени, которое, я полагаю, генерируется (MassTransit?):
RabbitMQ.Client.Exceptions.OperationInterruptedException: 'The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=403, text="ACCESS_REFUSED - access to exchange '*ComputerName*_dotnet_bus_73451gfsgerqwrefxfddgf' in vhost '/' refused for user 'user'", classId=40, methodId=10, cause='
Итак, обмен *ComputerName*_dotnet_bus_73451gfsgerqwrefxfddgf
, после этого он попытается подключиться к обмену test
. Конечно, я могу добавить обмен ComputerName....
к разрешениям, но тогда это нужно будет сделать для каждого компьютера, пытающегося запустить этот код. Почему MassTransit пытается подключиться к этой бирже? Код неправильный или это просто как работает MassTransit?
Это код для тестового приложения (я немного изменил его, чтобы он мог работать не сразу, но в целом код работает нормально):
using System;
using MassTransit;
namespace Test
{
public class Testing
{
public string Id { get; set; }
}
}
namespace Consumer
{
class Program
{
static void Main(string[] args)
{
var bus = Bus.Factory.CreateUsingRabbitMq(sbc =>
{
var host = sbc.Host(new Uri("rabbitmq://servername"), h =>
{
h.Username("user");
h.Password("user");
});
sbc.ReceiveEndpoint(host, "test", ep =>
{
ep.Handler<Testing>(context =>
{
return Console.Out.WriteLineAsync($"Received: {context.Message.Id}");
});
});
});
bus.Start();
// For testing purposes, we send a message ourselves.
bus.Publish(new Testing { Id = "X" });
Console.WriteLine("Waiting for messages. Press any key to exit");
Console.ReadKey();
bus.Stop();
}
}
}
Изображение разрешения пользователя rabbitMq admin: