У меня есть служба, которая должна подключиться к другой службе на startup
. Другой сервис - брокер Rabbitmq
.
Я слушаю какое-то событие из Rabbitmq
, поэтому мне нужно, чтобы оно активировалось с самого начала приложения.
Мне нужно подключиться к двум различным VHost
с, поэтомуМне нужно создать два соединения.
Проблема в том, что при запуске приложение постоянно создает соединения, пока сервер не выйдет из строя!
В управлении Rabbitmq я вижу много Connection
иChannels
созданы.
Я не могу выяснить, почему это происходит.
В общем, я хочу знать, как правильно подключаться к другим службам при запускемое приложение в ядре dotnet.
Я использую этот код для этого:
public void ConfigureServices(IServiceCollection services)
{
.....
services.AddSingleton<RabbitConnectionService>();
...
ActivatorUtilities.CreateInstance<RabbitConnectionService>(services.BuildServiceProvider());
}
И в конструкторе RabbitConnectionService
я подключаюсь к Rabbitmq
.
public RabbitConnectionService(IConfiguration configuration)
{
ServersMessageQueue = new MessageQueue(configuration.GetConnectionString("FirstVhost"), "First");
ClientsMessageQueue = new MessageQueue(configuration.GetConnectionString("SecondVhost"), "Second");
}
Класс сообщенияQueue:
public class MessageQueue
{
private IConnection connection;
private string RabbitURI;
private string ConnectionName;
static Logger _logger = LogManager.GetCurrentClassLogger();
public MessageQueue(string connectionUri, string connectionName)
{
ConnectionName = connectionName;
RabbitURI = connectionUri;
connection = CreateConnection();
}
private IConnection CreateConnection()
{
ConnectionFactory factory = new ConnectionFactory();
factory.Uri = new Uri(RabbitURI);
factory.AutomaticRecoveryEnabled = true;
factory.RequestedHeartbeat = 10;
return factory.CreateConnection(ConnectionName);
}
public IModel CreateChannel()
{
return connection.CreateModel();
}
...
}