Implementacion RabbitMQ
This commit is contained in:
parent
0995333044
commit
f0050c4898
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
|
||||||
@ -27,13 +28,29 @@ namespace MSAdminUsuarios.Context
|
|||||||
{
|
{
|
||||||
if (!optionsBuilder.IsConfigured)
|
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)
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
{
|
{
|
||||||
//modelBuilder.HasDefaultSchema("HIMSCAP"); // => AFQ
|
if (Debugger.IsAttached)
|
||||||
modelBuilder.HasDefaultSchema("ADMIN");
|
{
|
||||||
|
modelBuilder.HasDefaultSchema("HIMSCAP"); // => AFQ
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
modelBuilder.HasDefaultSchema("ADMIN");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
modelBuilder.Entity<MICROSERVICIO>(entity =>
|
modelBuilder.Entity<MICROSERVICIO>(entity =>
|
||||||
{
|
{
|
||||||
|
@ -6,6 +6,7 @@ using System.Data.SqlClient;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Transactions;
|
using System.Transactions;
|
||||||
using Microsoft.EntityFrameworkCore.Storage;
|
using Microsoft.EntityFrameworkCore.Storage;
|
||||||
|
using RabbitMQ.Client;
|
||||||
|
|
||||||
namespace MSAdminUsuarios.Controllers
|
namespace MSAdminUsuarios.Controllers
|
||||||
{
|
{
|
||||||
@ -14,14 +15,12 @@ namespace MSAdminUsuarios.Controllers
|
|||||||
public class PerfilesPorUsuarioController : ControllerBase
|
public class PerfilesPorUsuarioController : ControllerBase
|
||||||
{
|
{
|
||||||
private readonly ModelContext _context;
|
private readonly ModelContext _context;
|
||||||
|
//private readonly IModel _channel;
|
||||||
//public PerfilesPorUsuarioController()
|
|
||||||
//{
|
|
||||||
//}
|
|
||||||
|
|
||||||
public PerfilesPorUsuarioController(ModelContext context)
|
public PerfilesPorUsuarioController(ModelContext context)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
|
//_channel = channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
@ -44,148 +43,87 @@ namespace MSAdminUsuarios.Controllers
|
|||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IActionResult> GuardarPerfilesPorUsuario(PERFILPORUSUARIO[] guardar)
|
public async Task<IActionResult> GuardarPerfilesPorUsuario(PERFILPORUSUARIO[] guardar)
|
||||||
{
|
{
|
||||||
using var dbContextTransaction = _context.Database.BeginTransaction();
|
using (var dbContextTransaction = _context.Database.BeginTransaction())
|
||||||
List<string> error = new(); //Inicializamos variable para guardar errores
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
//var error = await GuardarPerfiles(guardar, _context);
|
List<string> error = new(); //Inicializamos variable para guardar errores
|
||||||
|
try
|
||||||
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;
|
//var error = await GuardarPerfiles(guardar, _context);
|
||||||
_context.PERFILESPORUSUARIOs.Update(cu);
|
|
||||||
await _context.SaveChangesAsync();
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var pxu in guardar)
|
var count = 0;
|
||||||
{
|
|
||||||
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)
|
// 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
|
cu.BL_ESTADO_PFLXUSU = 0;
|
||||||
existe_pxu[0].BL_ESTADO_PFLXUSU = 1;
|
_context.PERFILESPORUSUARIOs.Update(cu);
|
||||||
_context.Update(existe_pxu[0]);
|
|
||||||
await _context.SaveChangesAsync();
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pxu == null)
|
||||||
|
{
|
||||||
|
error.Add($"Perfil por usuario #{count} sin valores");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
pxu.BL_ESTADO_PFLXUSU = 1;
|
pxu.BL_ESTADO_PFLXUSU = 1;
|
||||||
_context.PERFILESPORUSUARIOs.Add(pxu);
|
_context.PERFILESPORUSUARIOs.Add(pxu);
|
||||||
await _context.SaveChangesAsync();
|
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();
|
||||||
}
|
}
|
||||||
|
catch (Exception ex)
|
||||||
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++;
|
//hacemos rollback si hay excepción
|
||||||
all.Add($"Error #{flag_r}: {r}");
|
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 Microsoft.EntityFrameworkCore;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Microsoft.IdentityModel.Tokens;
|
using Microsoft.IdentityModel.Tokens;
|
||||||
|
using RabbitMQ.Client;
|
||||||
|
|
||||||
namespace MSAdminUsuarios.Controllers
|
namespace MSAdminUsuarios.Controllers
|
||||||
{
|
{
|
||||||
@ -16,11 +17,18 @@ namespace MSAdminUsuarios.Controllers
|
|||||||
{
|
{
|
||||||
private readonly ModelContext _context;
|
private readonly ModelContext _context;
|
||||||
private readonly Encripter _encript = new();
|
private readonly Encripter _encript = new();
|
||||||
|
//private readonly IModel _channel;
|
||||||
|
|
||||||
public UsuariosController(ModelContext context)
|
public UsuariosController(ModelContext context)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
}
|
}
|
||||||
|
//public UsuariosController(ModelContext context, IModel channel)
|
||||||
|
//{
|
||||||
|
// _context = context;
|
||||||
|
// _channel = channel;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
[HttpPost("UserBene")]
|
[HttpPost("UserBene")]
|
||||||
public async Task<IActionResult> PostUserBeneficiario(string TX_IDENTIFICACION_AFIL)
|
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 consulta = _context.USUARIOSMs.FirstOrDefault(x => x.TX_PKDOC_USUMS == TX_PKDOC_USUMS);
|
||||||
|
|
||||||
var ininame = consulta.TX_PRIMERNOM_USUMS.ToCharArray();
|
var ininame = consulta.TX_PRIMERNOM_USUMS?.ToCharArray();
|
||||||
var iniape = consulta.TX_PRIMERAPELL_USUMS.ToCharArray();
|
var iniape = consulta.TX_PRIMERAPELL_USUMS?.ToCharArray();
|
||||||
|
|
||||||
NameObject nombreObjeto = new NameObject()
|
NameObject nombreObjeto = new NameObject()
|
||||||
{
|
{
|
||||||
iniciales = ininame[0].ToString() + iniape[0].ToString(),
|
iniciales = ininame?[0].ToString() + iniape?[0].ToString(),
|
||||||
nombre = consulta.TX_PRIMERNOM_USUMS.ToString() + " " + consulta.TX_PRIMERAPELL_USUMS.ToString(),
|
nombre = consulta.TX_PRIMERNOM_USUMS?.ToString() + " " + consulta.TX_PRIMERAPELL_USUMS?.ToString(),
|
||||||
pk = consulta.NU_PK_USUMS,
|
pk = consulta.NU_PK_USUMS,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -196,35 +204,6 @@ namespace MSAdminUsuarios.Controllers
|
|||||||
_context.USUARIOSMs.Add(usuario);
|
_context.USUARIOSMs.Add(usuario);
|
||||||
await _context.SaveChangesAsync();
|
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();
|
dbContextTransaction.Commit();
|
||||||
return Ok();
|
return Ok();
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,9 @@
|
|||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.23.1" />
|
<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="Oracle.EntityFrameworkCore" Version="6.21.61" />
|
||||||
|
<PackageReference Include="RabbitMQ.Client" Version="6.4.0" />
|
||||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.3.1" />
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.3.1" />
|
||||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.23.1" />
|
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.23.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -22,4 +24,10 @@
|
|||||||
<ProjectReference Include="..\..\Auth\Auth.csproj" />
|
<ProjectReference Include="..\..\Auth\Auth.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Update="appsettings.Development.json">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</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 MSAdminUsuarios.Context;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Security;
|
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);
|
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();
|
builder.Services.AddControllers();
|
||||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||||
builder.Services.AddEndpointsApiExplorer();
|
builder.Services.AddEndpointsApiExplorer();
|
||||||
builder.Services.AddSwaggerGen();
|
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
|
// Cadena de Conexion a Bases de Datos
|
||||||
// var connectionString = builder.Configuration.GetConnectionString("DBPrueba");
|
var ConString = builder.Configuration.GetSection("ConnectionStrings:ConString").Get<string>();
|
||||||
// var connectionString = builder.Configuration.GetConnectionString("DBProd");
|
|
||||||
var connectionString = builder.Configuration.GetConnectionString("DBUnisalud");
|
|
||||||
|
|
||||||
// Configuración del DbContext
|
// Configuración del DbContext
|
||||||
builder.Services.AddDbContext<ModelContext>(options =>
|
builder.Services.AddDbContext<ModelContext>(options =>
|
||||||
{
|
{
|
||||||
|
//IConfiguration configuration = builder.Configuration;
|
||||||
options.UseOracle(
|
options.UseOracle(
|
||||||
connectionString,
|
ConString,
|
||||||
options => options.UseOracleSQLCompatibility("11")
|
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
|
// Enable Cors
|
||||||
builder.Services.AddCors(options => {
|
builder.Services.AddCors(options => {
|
||||||
options.AddPolicy(name: "widthoutCors",
|
options.AddPolicy(name: "widthoutCors",
|
||||||
@ -35,6 +91,9 @@ builder.Services.AddCors(options => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Mapping / Build
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
|
|
||||||
// Configure the HTTP request pipeline.
|
// Configure the HTTP request pipeline.
|
||||||
@ -59,4 +118,10 @@ app.UseAuthorization();
|
|||||||
|
|
||||||
app.MapControllers();
|
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": {
|
"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)))"
|
"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": {
|
"RabbitMQConfig": {
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ConnectionStrings": {
|
"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)))"
|
"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": {
|
"RabbitMQConfig": {
|
||||||
|
Loading…
Reference in New Issue
Block a user