Implementacion RabbitMQ
This commit is contained in:
parent
0995333044
commit
f0050c4898
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
|
||||
@ -27,13 +28,29 @@ namespace MSAdminUsuarios.Context
|
||||
{
|
||||
if (!optionsBuilder.IsConfigured)
|
||||
{
|
||||
//! Requerido! para instanciar ModelContext sin injeccion
|
||||
var config = new ConfigurationBuilder()
|
||||
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
|
||||
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
|
||||
.AddJsonFile($"appsettings.Development.json", optional: true, reloadOnChange: true)
|
||||
.Build();
|
||||
|
||||
var ConString = config.GetSection("ConnectionStrings:ConString").Get<string>();
|
||||
optionsBuilder.UseOracle(ConString);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
//modelBuilder.HasDefaultSchema("HIMSCAP"); // => AFQ
|
||||
modelBuilder.HasDefaultSchema("ADMIN");
|
||||
if (Debugger.IsAttached)
|
||||
{
|
||||
modelBuilder.HasDefaultSchema("HIMSCAP"); // => AFQ
|
||||
}
|
||||
else
|
||||
{
|
||||
modelBuilder.HasDefaultSchema("ADMIN");
|
||||
}
|
||||
|
||||
|
||||
modelBuilder.Entity<MICROSERVICIO>(entity =>
|
||||
{
|
||||
|
@ -6,6 +6,7 @@ using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Transactions;
|
||||
using Microsoft.EntityFrameworkCore.Storage;
|
||||
using RabbitMQ.Client;
|
||||
|
||||
namespace MSAdminUsuarios.Controllers
|
||||
{
|
||||
@ -14,14 +15,12 @@ namespace MSAdminUsuarios.Controllers
|
||||
public class PerfilesPorUsuarioController : ControllerBase
|
||||
{
|
||||
private readonly ModelContext _context;
|
||||
|
||||
//public PerfilesPorUsuarioController()
|
||||
//{
|
||||
//}
|
||||
//private readonly IModel _channel;
|
||||
|
||||
public PerfilesPorUsuarioController(ModelContext context)
|
||||
{
|
||||
_context = context;
|
||||
//_channel = channel;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
@ -44,148 +43,87 @@ namespace MSAdminUsuarios.Controllers
|
||||
[HttpPost]
|
||||
public async Task<IActionResult> GuardarPerfilesPorUsuario(PERFILPORUSUARIO[] guardar)
|
||||
{
|
||||
using var dbContextTransaction = _context.Database.BeginTransaction();
|
||||
List<string> error = new(); //Inicializamos variable para guardar errores
|
||||
try
|
||||
using (var dbContextTransaction = _context.Database.BeginTransaction())
|
||||
{
|
||||
//var error = await GuardarPerfiles(guardar, _context);
|
||||
|
||||
var count = 0;
|
||||
|
||||
// Se cambia a estado 0 todos los perfiles por usuario existentes
|
||||
var existe_plfxusu = _context.PERFILESPORUSUARIOs.Where(x => x.BL_ESTADO_PFLXUSU == 1 && x.TX_FKDOC_USUMS == guardar[0].TX_FKDOC_USUMS).ToList();
|
||||
|
||||
foreach (var cu in existe_plfxusu)
|
||||
List<string> error = new(); //Inicializamos variable para guardar errores
|
||||
try
|
||||
{
|
||||
cu.BL_ESTADO_PFLXUSU = 0;
|
||||
_context.PERFILESPORUSUARIOs.Update(cu);
|
||||
await _context.SaveChangesAsync();
|
||||
}
|
||||
//var error = await GuardarPerfiles(guardar, _context);
|
||||
|
||||
foreach (var pxu in guardar)
|
||||
{
|
||||
count++;
|
||||
//Se comprueba existencia de cada pxu en base de datos
|
||||
var existe_pxu = (from dm in _context.PERFILESPORUSUARIOs
|
||||
where dm.NU_FK_PFL == pxu.NU_FK_PFL
|
||||
&& dm.TX_FKDOC_USUMS == pxu.TX_FKDOC_USUMS
|
||||
select dm).ToList();
|
||||
var count = 0;
|
||||
|
||||
if (existe_pxu.Count() > 0)
|
||||
// Se cambia a estado 0 todos los perfiles por usuario existentes
|
||||
var existe_plfxusu = _context.PERFILESPORUSUARIOs.Where(x => x.BL_ESTADO_PFLXUSU == 1 && x.TX_FKDOC_USUMS == guardar[0].TX_FKDOC_USUMS).ToList();
|
||||
|
||||
foreach (var cu in existe_plfxusu)
|
||||
{
|
||||
//Si existe activamos estado 1 del perfil
|
||||
existe_pxu[0].BL_ESTADO_PFLXUSU = 1;
|
||||
_context.Update(existe_pxu[0]);
|
||||
cu.BL_ESTADO_PFLXUSU = 0;
|
||||
_context.PERFILESPORUSUARIOs.Update(cu);
|
||||
await _context.SaveChangesAsync();
|
||||
continue;
|
||||
}
|
||||
else
|
||||
|
||||
foreach (var pxu in guardar)
|
||||
{
|
||||
if (pxu == null)
|
||||
count++;
|
||||
//Se comprueba existencia de cada pxu en base de datos
|
||||
var existe_pxu = (from dm in _context.PERFILESPORUSUARIOs
|
||||
where dm.NU_FK_PFL == pxu.NU_FK_PFL
|
||||
&& dm.TX_FKDOC_USUMS == pxu.TX_FKDOC_USUMS
|
||||
select dm).ToList();
|
||||
|
||||
if (existe_pxu.Count() > 0)
|
||||
{
|
||||
error.Add($"Perfil por usuario #{count} sin valores");
|
||||
//Si existe activamos estado 1 del perfil
|
||||
existe_pxu[0].BL_ESTADO_PFLXUSU = 1;
|
||||
_context.Update(existe_pxu[0]);
|
||||
await _context.SaveChangesAsync();
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pxu == null)
|
||||
{
|
||||
error.Add($"Perfil por usuario #{count} sin valores");
|
||||
continue;
|
||||
}
|
||||
|
||||
pxu.BL_ESTADO_PFLXUSU = 1;
|
||||
_context.PERFILESPORUSUARIOs.Add(pxu);
|
||||
await _context.SaveChangesAsync();
|
||||
pxu.BL_ESTADO_PFLXUSU = 1;
|
||||
_context.PERFILESPORUSUARIOs.Add(pxu);
|
||||
await _context.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
|
||||
dbContextTransaction.Commit();
|
||||
|
||||
List<string> all = new List<string>();
|
||||
|
||||
all.Add($"Total registros: {guardar.Count().ToString()}");
|
||||
all.Add($"Exitosos: {(guardar.Count() - error.Count()).ToString()}");
|
||||
all.Add($"Erroneos: {error.Count().ToString()}");
|
||||
|
||||
var flag_r = 0;
|
||||
foreach (var r in error)
|
||||
{
|
||||
flag_r++;
|
||||
all.Add($"Error #{flag_r}: {r}");
|
||||
}
|
||||
|
||||
if (error.Count() > 0)
|
||||
{
|
||||
return Conflict(all.ToList());
|
||||
}
|
||||
return Ok();
|
||||
}
|
||||
|
||||
dbContextTransaction.Commit();
|
||||
|
||||
List<string> all = new List<string>();
|
||||
|
||||
all.Add($"Total registros: {guardar.Count().ToString()}");
|
||||
all.Add($"Exitosos: {(guardar.Count() - error.Count()).ToString()}");
|
||||
all.Add($"Erroneos: {error.Count().ToString()}");
|
||||
|
||||
var flag_r = 0;
|
||||
foreach (var r in error)
|
||||
catch (Exception ex)
|
||||
{
|
||||
flag_r++;
|
||||
all.Add($"Error #{flag_r}: {r}");
|
||||
//hacemos rollback si hay excepción
|
||||
dbContextTransaction.Rollback();
|
||||
return BadRequest(ex.Message);
|
||||
}
|
||||
|
||||
if (error.Count() > 0)
|
||||
{
|
||||
return Conflict(all.ToList());
|
||||
}
|
||||
return Ok();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//hacemos rollback si hay excepción
|
||||
dbContextTransaction.Rollback();
|
||||
return BadRequest(ex.Message);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Eliminado 19/03/23, RabbitMQ lo controla
|
||||
//[ApiExplorerSettings(IgnoreApi = true)]
|
||||
//[NonAction]
|
||||
//public async Task<List<string>> GuardarPerfiles(PERFILPORUSUARIO[] guardar, ModelContext context)
|
||||
//{
|
||||
// //using var transactionScope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(60));
|
||||
// try
|
||||
// {
|
||||
// List<string> error = new(); //Inicializamos variable para guardar errores
|
||||
// var count = 0;
|
||||
|
||||
// // Se cambia a estado 0 todos los perfiles por usuario existentes
|
||||
// var existe_plfxusu = context.PERFILESPORUSUARIOs.Where(x => x.BL_ESTADO_PFLXUSU == 1 && x.TX_FKDOC_USUMS == guardar[0].TX_FKDOC_USUMS).ToList();
|
||||
|
||||
// foreach (var cu in existe_plfxusu)
|
||||
// {
|
||||
// cu.BL_ESTADO_PFLXUSU = 0;
|
||||
// context.PERFILESPORUSUARIOs.Update(cu);
|
||||
// await context.SaveChangesAsync();
|
||||
// }
|
||||
|
||||
// foreach (var pxu in guardar)
|
||||
// {
|
||||
// count++;
|
||||
// //Se comprueba existencia de cada pxu en base de datos
|
||||
// var existe_pxu = (from dm in context.PERFILESPORUSUARIOs
|
||||
// where dm.NU_FK_PFL == pxu.NU_FK_PFL
|
||||
// && dm.TX_FKDOC_USUMS == pxu.TX_FKDOC_USUMS
|
||||
// select dm).ToList();
|
||||
|
||||
// if (existe_pxu.Count() > 0)
|
||||
// {
|
||||
// //Si existe activamos estado 1 del perfil
|
||||
// existe_pxu[0].BL_ESTADO_PFLXUSU = 1;
|
||||
// context.Update(existe_pxu[0]);
|
||||
// await context.SaveChangesAsync();
|
||||
// continue;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (pxu == null)
|
||||
// {
|
||||
// error.Add($"Perfil por usuario #{count} sin valores");
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// pxu.BL_ESTADO_PFLXUSU = 1;
|
||||
// context.PERFILESPORUSUARIOs.Add(pxu);
|
||||
// await context.SaveChangesAsync();
|
||||
// }
|
||||
// }
|
||||
// //transactionScope.Complete();
|
||||
// return error;
|
||||
|
||||
// }
|
||||
// catch (Exception)
|
||||
// {
|
||||
// //transactionScope.Dispose();
|
||||
// throw;
|
||||
// }
|
||||
|
||||
|
||||
//}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Components.Forms;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System.Linq;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using RabbitMQ.Client;
|
||||
|
||||
namespace MSAdminUsuarios.Controllers
|
||||
{
|
||||
@ -16,11 +17,18 @@ namespace MSAdminUsuarios.Controllers
|
||||
{
|
||||
private readonly ModelContext _context;
|
||||
private readonly Encripter _encript = new();
|
||||
//private readonly IModel _channel;
|
||||
|
||||
public UsuariosController(ModelContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
//public UsuariosController(ModelContext context, IModel channel)
|
||||
//{
|
||||
// _context = context;
|
||||
// _channel = channel;
|
||||
//}
|
||||
|
||||
|
||||
[HttpPost("UserBene")]
|
||||
public async Task<IActionResult> PostUserBeneficiario(string TX_IDENTIFICACION_AFIL)
|
||||
@ -65,13 +73,13 @@ namespace MSAdminUsuarios.Controllers
|
||||
{
|
||||
var consulta = _context.USUARIOSMs.FirstOrDefault(x => x.TX_PKDOC_USUMS == TX_PKDOC_USUMS);
|
||||
|
||||
var ininame = consulta.TX_PRIMERNOM_USUMS.ToCharArray();
|
||||
var iniape = consulta.TX_PRIMERAPELL_USUMS.ToCharArray();
|
||||
var ininame = consulta.TX_PRIMERNOM_USUMS?.ToCharArray();
|
||||
var iniape = consulta.TX_PRIMERAPELL_USUMS?.ToCharArray();
|
||||
|
||||
NameObject nombreObjeto = new NameObject()
|
||||
{
|
||||
iniciales = ininame[0].ToString() + iniape[0].ToString(),
|
||||
nombre = consulta.TX_PRIMERNOM_USUMS.ToString() + " " + consulta.TX_PRIMERAPELL_USUMS.ToString(),
|
||||
iniciales = ininame?[0].ToString() + iniape?[0].ToString(),
|
||||
nombre = consulta.TX_PRIMERNOM_USUMS?.ToString() + " " + consulta.TX_PRIMERAPELL_USUMS?.ToString(),
|
||||
pk = consulta.NU_PK_USUMS,
|
||||
};
|
||||
|
||||
@ -196,35 +204,6 @@ namespace MSAdminUsuarios.Controllers
|
||||
_context.USUARIOSMs.Add(usuario);
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
// Perfil quemado de invitado cuando se crea un usuario desde Integrantes Comité
|
||||
// Calidad (MsProgramacionComite)
|
||||
var esIntegranteCTC = Request.Headers.FirstOrDefault(h => h.Key == "Comite").Value;
|
||||
|
||||
if (String.IsNullOrEmpty(esIntegranteCTC) == false && esIntegranteCTC.Contains("true"))
|
||||
{
|
||||
usuario.NU_TIPODOC_USUMS = 0;
|
||||
usuario.NU_ESTADO_USUMS = 1;
|
||||
var perfil = new List<PERFILPORUSUARIO>
|
||||
{
|
||||
new PERFILPORUSUARIO()
|
||||
{
|
||||
NU_PK_PFLXUSU = -1,
|
||||
NU_FK_PFL = 103, // QUEMADO!
|
||||
BL_ESTADO_PFLXUSU = 1,
|
||||
TX_FKDOC_USUMS = usuario.TX_PKDOC_USUMS
|
||||
}
|
||||
};
|
||||
|
||||
var ctrl = new PerfilesPorUsuarioController(_context);
|
||||
var errors = await ctrl.GuardarPerfiles(perfil.ToArray(), _context);
|
||||
|
||||
if(errors != null && errors.Count > 0)
|
||||
{
|
||||
throw new Exception();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
dbContextTransaction.Commit();
|
||||
return Ok();
|
||||
}
|
||||
|
@ -13,7 +13,9 @@
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.23.1" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||
<PackageReference Include="Oracle.EntityFrameworkCore" Version="6.21.61" />
|
||||
<PackageReference Include="RabbitMQ.Client" Version="6.4.0" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.3.1" />
|
||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.23.1" />
|
||||
</ItemGroup>
|
||||
@ -22,4 +24,10 @@
|
||||
<ProjectReference Include="..\..\Auth\Auth.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Update="appsettings.Development.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
21
Microservicios/MsUsuarios/Models/RabbitMQConfig.cs
Normal file
21
Microservicios/MsUsuarios/Models/RabbitMQConfig.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace MSAdminUsuarios.Models
|
||||
{
|
||||
public class RabbitMQConfig
|
||||
{
|
||||
public string HostName { get; set; } = null!;
|
||||
public string UserName { get; set; } = null!;
|
||||
public string Password { get; set; } = null!;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
if(Debugger.IsAttached) {
|
||||
return ($"HostName: {HostName},\n " +
|
||||
$"UserName: {UserName},\n" +
|
||||
$"Password: {Password}");
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
@ -1,30 +1,86 @@
|
||||
using MSAdminUsuarios.Context;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Security;
|
||||
using System.Reflection;
|
||||
using MSAdminUsuarios.Models;
|
||||
using Microsoft.Extensions.Options;
|
||||
using RabbitMQ.Client;
|
||||
using MSAdminUsuarios.Utils;
|
||||
using RabbitMQ.Client.Events;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
// Add services to the container.
|
||||
var config = new ConfigurationBuilder()
|
||||
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
|
||||
.AddJsonFile($"appsettings.Development.json", optional: true, reloadOnChange: true);
|
||||
|
||||
|
||||
// Add services to the container.
|
||||
builder.Services.AddControllers();
|
||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||
builder.Services.AddEndpointsApiExplorer();
|
||||
builder.Services.AddSwaggerGen();
|
||||
|
||||
|
||||
#region Logging
|
||||
// Add logging configuration
|
||||
builder.Logging.ClearProviders();
|
||||
builder.Logging.AddConsole();
|
||||
builder.Logging.AddDebug();
|
||||
|
||||
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole().AddEventLog());
|
||||
|
||||
#warning Cuidado! NO cambiar nombre del proyecto! 19/03/23 -LM
|
||||
string projectName = Assembly.GetEntryAssembly()?.GetName().Name ?? "MSAdminUsuarios";
|
||||
var logger = loggerFactory.CreateLogger(projectName);
|
||||
#endregion
|
||||
|
||||
#region Config: Base de Datos
|
||||
// Cadena de Conexion a Bases de Datos
|
||||
// var connectionString = builder.Configuration.GetConnectionString("DBPrueba");
|
||||
// var connectionString = builder.Configuration.GetConnectionString("DBProd");
|
||||
var connectionString = builder.Configuration.GetConnectionString("DBUnisalud");
|
||||
var ConString = builder.Configuration.GetSection("ConnectionStrings:ConString").Get<string>();
|
||||
|
||||
// Configuración del DbContext
|
||||
builder.Services.AddDbContext<ModelContext>(options =>
|
||||
{
|
||||
//IConfiguration configuration = builder.Configuration;
|
||||
options.UseOracle(
|
||||
connectionString,
|
||||
options => options.UseOracleSQLCompatibility("11")
|
||||
ConString,
|
||||
options =>
|
||||
options.UseOracleSQLCompatibility("11")
|
||||
);
|
||||
});
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Config: RabbitMQ
|
||||
|
||||
//Get config desde appsettings.json
|
||||
builder.Services.Configure<RabbitMQConfig>(builder.Configuration.GetSection("RabbitMQConfig"));
|
||||
|
||||
builder.Services.AddSingleton<IConnection>(sp =>
|
||||
{
|
||||
var config = sp.GetRequiredService<IOptions<RabbitMQConfig>>().Value;
|
||||
|
||||
var factory = new ConnectionFactory
|
||||
{
|
||||
HostName = config.HostName,
|
||||
UserName = config.UserName,
|
||||
Password = config.Password
|
||||
};
|
||||
return factory.CreateConnection();
|
||||
});
|
||||
|
||||
builder.Services.AddScoped<IModel>(provider =>
|
||||
{
|
||||
// Creación de channel, declaración de queues y binding
|
||||
return RabbitMQService.GetRabbitMQChannel(provider, projectName);
|
||||
});
|
||||
|
||||
#endregion
|
||||
|
||||
#region Config: Cors
|
||||
|
||||
// Enable Cors
|
||||
builder.Services.AddCors(options => {
|
||||
options.AddPolicy(name: "widthoutCors",
|
||||
@ -35,6 +91,9 @@ builder.Services.AddCors(options => {
|
||||
});
|
||||
});
|
||||
|
||||
#endregion
|
||||
|
||||
#region Mapping / Build
|
||||
var app = builder.Build();
|
||||
|
||||
// Configure the HTTP request pipeline.
|
||||
@ -59,4 +118,10 @@ app.UseAuthorization();
|
||||
|
||||
app.MapControllers();
|
||||
|
||||
app.Run();
|
||||
#endregion
|
||||
|
||||
|
||||
// Start and Subscribe to RabbitMQ event
|
||||
RabbitMQService.ListenForIntegrationEvents(projectName, builder);
|
||||
|
||||
app.Run();
|
207
Microservicios/MsUsuarios/Utils/RabbitMQService.cs
Normal file
207
Microservicios/MsUsuarios/Utils/RabbitMQService.cs
Normal file
@ -0,0 +1,207 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using MSAdminUsuarios.Context;
|
||||
using MSAdminUsuarios.Controllers;
|
||||
using MSAdminUsuarios.Models;
|
||||
using Newtonsoft.Json;
|
||||
using RabbitMQ.Client;
|
||||
using RabbitMQ.Client.Events;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
|
||||
namespace MSAdminUsuarios.Utils
|
||||
{
|
||||
public static class RabbitMQService
|
||||
{
|
||||
private static string[] _queues = Array.Empty<string>();
|
||||
private static string _exchange = "MSAdminUsuarios";
|
||||
|
||||
|
||||
public static IModel GetRabbitMQChannel(IServiceProvider serviceProvider, string projectName)
|
||||
{
|
||||
//var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole().AddEventLog());
|
||||
//var logger = loggerFactory.CreateLogger("Rabbit1");
|
||||
|
||||
var connection = serviceProvider.GetService<IConnection>();
|
||||
|
||||
if (connection == null)
|
||||
throw new Exception("Connection is null.");
|
||||
|
||||
var channel = connection.CreateModel();
|
||||
|
||||
//Declare exchange if it doesnt already exist
|
||||
var exchangeName = projectName;
|
||||
_exchange = exchangeName;
|
||||
|
||||
|
||||
channel.ExchangeDeclare(
|
||||
exchange: exchangeName,
|
||||
type: ExchangeType.Topic,
|
||||
durable: true,
|
||||
autoDelete: false,
|
||||
arguments: null
|
||||
);
|
||||
|
||||
_queues = new string[]
|
||||
{
|
||||
$"{exchangeName}.PerfilesPorUsuario",
|
||||
$"{exchangeName}.Usuarios"
|
||||
};
|
||||
|
||||
foreach (var queue in _queues)
|
||||
{
|
||||
channel.QueueDeclare(
|
||||
queue: queue,
|
||||
durable: true,
|
||||
exclusive: false,
|
||||
autoDelete: false,
|
||||
arguments: null
|
||||
);
|
||||
|
||||
channel.QueueBind(
|
||||
queue: queue,
|
||||
exchange: exchangeName,
|
||||
routingKey: $"{queue}.*"
|
||||
);
|
||||
}
|
||||
|
||||
return channel;
|
||||
}
|
||||
|
||||
public static void ListenForIntegrationEvents(string projectName, WebApplicationBuilder builder)
|
||||
{
|
||||
RabbitMQConfig mqConfig = builder.Configuration.GetSection("RabbitMQConfig").Get<RabbitMQConfig>();
|
||||
|
||||
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole().AddEventLog());
|
||||
//var logger = loggerFactory.CreateLogger("Rabbit2");
|
||||
//logger.LogInformation("Inicia Rabbitmq con");
|
||||
|
||||
ConnectionFactory factory = new()
|
||||
{
|
||||
HostName = mqConfig.HostName,
|
||||
UserName = mqConfig.UserName,
|
||||
Password = mqConfig.Password,
|
||||
};
|
||||
|
||||
IConnection connection = factory.CreateConnection();
|
||||
IModel channel = connection.CreateModel();
|
||||
|
||||
EventingBasicConsumer consumer = new(channel);
|
||||
|
||||
consumer.Received += RabbitMQService.ConsumeRabbitMQEvent;
|
||||
|
||||
List<string> queues = new()
|
||||
{
|
||||
$"{projectName}.PerfilesPorUsuario",
|
||||
$"{projectName}.Usuarios",
|
||||
};
|
||||
|
||||
foreach (var queue in queues)
|
||||
{
|
||||
channel.BasicConsume(
|
||||
queue: queue,
|
||||
autoAck: false,
|
||||
consumer: consumer
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static async void ConsumeRabbitMQEvent(object? sender, BasicDeliverEventArgs ea)
|
||||
{
|
||||
var body = ea.Body.ToArray();
|
||||
var message = Encoding.UTF8.GetString(body);
|
||||
|
||||
var route = ea.RoutingKey;
|
||||
|
||||
if (message == null || message.Length == 0)
|
||||
{
|
||||
throw new Exception("Datos no recibidos");
|
||||
}
|
||||
|
||||
if (route == null || route.Length == 0)
|
||||
{
|
||||
throw new Exception("RouteKey no recibida");
|
||||
}
|
||||
|
||||
|
||||
var controller = route.Split(".");
|
||||
|
||||
|
||||
var consumer = (EventingBasicConsumer)sender!;
|
||||
var model = consumer.Model;
|
||||
|
||||
|
||||
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole().AddEventLog());
|
||||
var logger = loggerFactory.CreateLogger("RMQ.MsAdminUsuarios");
|
||||
|
||||
ModelContext context = new();
|
||||
|
||||
if (controller[1] == "PerfilesPorUsuario")
|
||||
{
|
||||
try
|
||||
{
|
||||
var data = JsonConvert.DeserializeObject<PERFILPORUSUARIO[]>(message);
|
||||
|
||||
var PPUCtrl = new PerfilesPorUsuarioController(context);
|
||||
var result = await PPUCtrl.GuardarPerfilesPorUsuario(data!);
|
||||
|
||||
if (result is OkResult)
|
||||
{
|
||||
model.BasicAck(ea.DeliveryTag, false);
|
||||
}
|
||||
else throw new Exception();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Temporalmente solo logeamos el error en lugar de rechazar
|
||||
logger.LogCritical(ExMessage(ex));
|
||||
//model.BasicReject(ea.DeliveryTag, true);
|
||||
|
||||
|
||||
model.BasicAck(ea.DeliveryTag, false);
|
||||
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (controller[1] == "Usuarios")
|
||||
{
|
||||
try
|
||||
{
|
||||
var data = JsonConvert.DeserializeObject<USUARIO>(message);
|
||||
var UsuariosCtrl = new UsuariosController(context);
|
||||
|
||||
var result = await UsuariosCtrl.GuardarUsuarios(data!);
|
||||
|
||||
|
||||
if (result is OkResult)
|
||||
{
|
||||
model.BasicAck(ea.DeliveryTag, false);
|
||||
}
|
||||
else throw new Exception();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Temporalmente solo logeamos el error en lugar de rechazar
|
||||
logger.LogCritical(ExMessage(ex));
|
||||
//model.BasicReject(ea.DeliveryTag, true);
|
||||
|
||||
|
||||
model.BasicAck(ea.DeliveryTag, false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static string ExMessage(Exception ex)
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
sb.Append(ex.Message)
|
||||
.Append(ex.InnerException);
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,9 +1,5 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"DBPrueba": "user id=HIMSCAP;password=ITTASA2017;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=181.129.245.90)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PROYECTOS)))",
|
||||
"DBProd": "user id=HIMSCAP;password=ITTASA2017;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.194)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PROYECTOS)))",
|
||||
"DBUnisalud": "user id=Admin;password=LWxZwRFgEpBHtnEHR233;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=unisalud.cc6itcnj1ux9.us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=UNISALUD)))",
|
||||
|
||||
"ConString": "user id=HIMSCAP;password=ITTASA2017;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=181.129.245.90)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PROYECTOS)))"
|
||||
},
|
||||
"RabbitMQConfig": {
|
||||
|
@ -1,9 +1,5 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"DBPrueba": "user id=HIMSCAP;password=ITTASA2017;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=181.129.245.90)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PROYECTOS)))",
|
||||
"DBProd": "user id=HIMSCAP;password=ITTASA2017;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.194)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=PROYECTOS)))",
|
||||
"DBUnisalud": "user id=Admin;password=LWxZwRFgEpBHtnEHR233;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=unisalud.cc6itcnj1ux9.us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=UNISALUD)))",
|
||||
|
||||
"ConString": "user id=Admin;password=LWxZwRFgEpBHtnEHR233;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=unisalud.cc6itcnj1ux9.us-east-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=UNISALUD)))"
|
||||
},
|
||||
"RabbitMQConfig": {
|
||||
|
Loading…
Reference in New Issue
Block a user