add new function to ensure connection for sinexcel

This commit is contained in:
atef 2026-02-13 10:04:38 +01:00
parent d324de335e
commit 0b0d91f4dd
1 changed files with 36 additions and 11 deletions

View File

@ -7,12 +7,11 @@ using RabbitMQ.Client;
namespace InnovEnergy.App.SinexcelCommunication.MiddlewareClasses;
[SuppressMessage("Trimming", "IL2026:Members annotated with \'RequiresUnreferencedCodeAttribute\' require dynamic access otherwise can break functionality when trimming application code")]
public static class RabbitMqManager
{
public static ConnectionFactory? Factory ;
public static IConnection ? Connection;
public static IModel? Channel;
private static ConnectionFactory? _factory ;
private static IConnection ? _connection;
private static IModel? _channel;
public static Boolean SubscribeToQueue(StatusMessage currentSalimaxState, String? s3Bucket,String VpnServerIp)
{
@ -20,19 +19,22 @@ public static class RabbitMqManager
{
//_factory = new ConnectionFactory { HostName = VpnServerIp };
Factory = new ConnectionFactory
_factory = new ConnectionFactory
{
HostName = VpnServerIp,
Port = 5672,
VirtualHost = "/",
UserName = "producer",
Password = "b187ceaddb54d5485063ddc1d41af66f",
AutomaticRecoveryEnabled = true,
NetworkRecoveryInterval = TimeSpan.FromSeconds(10),
RequestedHeartbeat = TimeSpan.FromSeconds(30)
};
Connection = Factory.CreateConnection();
Channel = Connection.CreateModel();
Channel.QueueDeclare(queue: "statusQueue", durable: true, exclusive: false, autoDelete: false, arguments: null);
_connection = _factory.CreateConnection();
_channel = _connection.CreateModel();
_channel.QueueDeclare(queue: "statusQueue", durable: true, exclusive: false, autoDelete: false, arguments: null);
Console.WriteLine("The controller sends its status to the middleware for the first time");
if (s3Bucket != null) InformMiddleware(currentSalimaxState);
@ -52,13 +54,36 @@ public static class RabbitMqManager
var message = JsonSerializer.Serialize(status);
var body = Encoding.UTF8.GetBytes(message);
Channel.BasicPublish(exchange: string.Empty,
_channel.BasicPublish(exchange: string.Empty,
routingKey: "statusQueue",
basicProperties: null,
body: body);
Console.WriteLine($"Producer sent message: {message}");
}
public static Boolean EnsureConnected(StatusMessage currentSalimaxState, string? s3Bucket, string vpnServerIp)
{
try
{
if (_connection == null || !_connection.IsOpen ||
_channel == null || _channel.IsClosed)
{
Console.WriteLine("⚠ RabbitMQ connection lost. Reconnecting...");
_connection?.Dispose();
_channel?.Dispose();
return SubscribeToQueue(currentSalimaxState, s3Bucket, vpnServerIp);
}
return true;
}
catch (Exception ex)
{
Console.WriteLine("❌ Error while ensuring RabbitMQ connection: " + ex);
return false;
}
}
}