Add Queue to Dependency Injection (Optimize)
This commit is contained in:
parent
c0749bdc20
commit
cf7a79166a
3 changed files with 116 additions and 33 deletions
|
|
@ -14,6 +14,7 @@ using BMA.EHR.Leave.Service.DTOs.ChangeRound;
|
||||||
using BMA.EHR.Leave.Service.DTOs.CheckIn;
|
using BMA.EHR.Leave.Service.DTOs.CheckIn;
|
||||||
using BMA.EHR.Leave.Service.DTOs.DutyTime;
|
using BMA.EHR.Leave.Service.DTOs.DutyTime;
|
||||||
using BMA.EHR.Leave.Service.DTOs.LeaveRequest;
|
using BMA.EHR.Leave.Service.DTOs.LeaveRequest;
|
||||||
|
using BMA.EHR.Leave.Service.Services;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
@ -58,6 +59,10 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
|
|
||||||
private readonly string _bucketName = "check-in";
|
private readonly string _bucketName = "check-in";
|
||||||
|
|
||||||
|
private readonly string _fakeQueueName = "fake-checkin-queue";
|
||||||
|
private readonly string _realQueueName = "checkin-queue";
|
||||||
|
private readonly RabbitCheckInService _rabbitCheckInService;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region " Constuctor and Destructor "
|
#region " Constuctor and Destructor "
|
||||||
|
|
@ -75,7 +80,8 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
AdditionalCheckRequestRepository additionalCheckRequestRepository,
|
AdditionalCheckRequestRepository additionalCheckRequestRepository,
|
||||||
UserCalendarRepository userCalendarRepository,
|
UserCalendarRepository userCalendarRepository,
|
||||||
CommandRepository commandRepository,
|
CommandRepository commandRepository,
|
||||||
LeaveRequestRepository leaveRequestRepository)
|
LeaveRequestRepository leaveRequestRepository,
|
||||||
|
RabbitCheckInService rabbitCheckInService)
|
||||||
{
|
{
|
||||||
_dutyTimeRepository = dutyTimeRepository;
|
_dutyTimeRepository = dutyTimeRepository;
|
||||||
_context = context;
|
_context = context;
|
||||||
|
|
@ -91,6 +97,7 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
_userCalendarRepository = userCalendarRepository;
|
_userCalendarRepository = userCalendarRepository;
|
||||||
_commandRepository = commandRepository;
|
_commandRepository = commandRepository;
|
||||||
_leaveRequestRepository = leaveRequestRepository;
|
_leaveRequestRepository = leaveRequestRepository;
|
||||||
|
_rabbitCheckInService = rabbitCheckInService;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -458,27 +465,32 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
Token = AccessToken ?? ""
|
Token = AccessToken ?? ""
|
||||||
};
|
};
|
||||||
|
|
||||||
// create connection
|
//// create connection
|
||||||
var factory = new ConnectionFactory()
|
//var factory = new ConnectionFactory()
|
||||||
{
|
//{
|
||||||
HostName = _configuration["Rabbit:Host"],
|
// HostName = _configuration["Rabbit:Host"],
|
||||||
UserName = _configuration["Rabbit:User"],
|
// UserName = _configuration["Rabbit:User"],
|
||||||
Password = _configuration["Rabbit:Password"],
|
// Password = _configuration["Rabbit:Password"],
|
||||||
};
|
//};
|
||||||
|
|
||||||
// create channel
|
//// create channel
|
||||||
using var connection = factory.CreateConnection();
|
//using var connection = factory.CreateConnection();
|
||||||
using var channel = connection.CreateModel();
|
//using var channel = connection.CreateModel();
|
||||||
channel.QueueDeclare(queue: "checkin-queue", durable: false, exclusive: false, autoDelete: false, arguments: null);
|
//channel.QueueDeclare(queue: "checkin-queue", durable: false, exclusive: false, autoDelete: false, arguments: null);
|
||||||
|
|
||||||
|
//// แปลง Object เป็น JSON สตริง
|
||||||
|
//var serializedObject = JsonConvert.SerializeObject(checkData);
|
||||||
|
|
||||||
|
//// แปลง JSON สตริงเป็น byte array
|
||||||
|
//var body = Encoding.UTF8.GetBytes(serializedObject);
|
||||||
|
|
||||||
|
//channel.BasicPublish(exchange: "", routingKey: "checkin-queue", basicProperties: null, body: body);
|
||||||
|
//Console.WriteLine($"Send to Queue: {serializedObject}");
|
||||||
|
|
||||||
// แปลง Object เป็น JSON สตริง
|
|
||||||
var serializedObject = JsonConvert.SerializeObject(checkData);
|
var serializedObject = JsonConvert.SerializeObject(checkData);
|
||||||
|
|
||||||
// แปลง JSON สตริงเป็น byte array
|
|
||||||
var body = Encoding.UTF8.GetBytes(serializedObject);
|
var body = Encoding.UTF8.GetBytes(serializedObject);
|
||||||
|
_rabbitCheckInService.SendMessageToQueue(_realQueueName, body);
|
||||||
|
|
||||||
channel.BasicPublish(exchange: "", routingKey: "checkin-queue", basicProperties: null, body: body);
|
|
||||||
Console.WriteLine($"Send to Queue: {serializedObject}");
|
|
||||||
|
|
||||||
return Success(new { date = currentDate });
|
return Success(new { date = currentDate });
|
||||||
}
|
}
|
||||||
|
|
@ -500,27 +512,25 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
{
|
{
|
||||||
var currentDate = DateTime.Now;
|
var currentDate = DateTime.Now;
|
||||||
|
|
||||||
// create connection
|
//// create connection
|
||||||
var factory = new ConnectionFactory()
|
//var factory = new ConnectionFactory()
|
||||||
{
|
//{
|
||||||
HostName = _configuration["Rabbit:Host"],
|
// HostName = _configuration["Rabbit:Host"],
|
||||||
UserName = _configuration["Rabbit:User"],
|
// UserName = _configuration["Rabbit:User"],
|
||||||
Password = _configuration["Rabbit:Password"],
|
// Password = _configuration["Rabbit:Password"],
|
||||||
};
|
//};
|
||||||
|
|
||||||
// create channel
|
//// create channel
|
||||||
using var connection = factory.CreateConnection();
|
//using var connection = factory.CreateConnection();
|
||||||
using var channel = connection.CreateModel();
|
//using var channel = connection.CreateModel();
|
||||||
channel.QueueDeclare(queue: "fake-checkin-queue", durable: false, exclusive: false, autoDelete: false, arguments: null);
|
//channel.QueueDeclare(queue: "fake-checkin-queue", durable: false, exclusive: false, autoDelete: false, arguments: null);
|
||||||
|
|
||||||
// แปลง Object เป็น JSON สตริง
|
|
||||||
var serializedObject = JsonConvert.SerializeObject(data);
|
var serializedObject = JsonConvert.SerializeObject(data);
|
||||||
|
|
||||||
// แปลง JSON สตริงเป็น byte array
|
|
||||||
var body = Encoding.UTF8.GetBytes(serializedObject);
|
var body = Encoding.UTF8.GetBytes(serializedObject);
|
||||||
|
_rabbitCheckInService.SendMessageToQueue(_fakeQueueName, body);
|
||||||
|
|
||||||
channel.BasicPublish(exchange: "", routingKey: "fake-checkin-queue", basicProperties: null, body: body);
|
//channel.BasicPublish(exchange: "", routingKey: "fake-checkin-queue", basicProperties: null, body: body);
|
||||||
Console.WriteLine($"Send to Queue: {serializedObject}");
|
//Console.WriteLine($"Send to Queue: {serializedObject}");
|
||||||
|
|
||||||
return Success(new { date = currentDate });
|
return Success(new { date = currentDate });
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ using System.Transactions;
|
||||||
using BMA.EHR.Leave.Service.Filters;
|
using BMA.EHR.Leave.Service.Filters;
|
||||||
using Hangfire.Common;
|
using Hangfire.Common;
|
||||||
using BMA.EHR.Application.Repositories.Leaves.TimeAttendants;
|
using BMA.EHR.Application.Repositories.Leaves.TimeAttendants;
|
||||||
|
using RabbitMQ.Client;
|
||||||
|
using BMA.EHR.Leave.Service.Services;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
{
|
{
|
||||||
|
|
@ -28,6 +30,51 @@ var builder = WebApplication.CreateBuilder(args);
|
||||||
var key = builder.Configuration["Jwt:Key"];
|
var key = builder.Configuration["Jwt:Key"];
|
||||||
|
|
||||||
|
|
||||||
|
// ตั้งค่า RabbitMQ connection
|
||||||
|
builder.Services.AddSingleton<IConnection>(sp =>
|
||||||
|
{
|
||||||
|
var factory = new ConnectionFactory()
|
||||||
|
{
|
||||||
|
HostName = builder.Configuration["Rabbit:Host"],
|
||||||
|
UserName = builder.Configuration["Rabbit:User"],
|
||||||
|
Password = builder.Configuration["Rabbit:Password"],
|
||||||
|
};
|
||||||
|
return factory.CreateConnection();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
builder.Services.AddSingleton<IModel>(sp =>
|
||||||
|
{
|
||||||
|
var connection = sp.GetRequiredService<IConnection>();
|
||||||
|
var channel = connection.CreateModel();
|
||||||
|
|
||||||
|
// ประกาศ queue
|
||||||
|
channel.QueueDeclare(queue: "fake-checkin-queue",
|
||||||
|
durable: true,
|
||||||
|
exclusive: false,
|
||||||
|
autoDelete: false,
|
||||||
|
arguments: null);
|
||||||
|
|
||||||
|
return channel;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
builder.Services.AddSingleton<IModel>(sp =>
|
||||||
|
{
|
||||||
|
var connection = sp.GetRequiredService<IConnection>();
|
||||||
|
var channel = connection.CreateModel();
|
||||||
|
|
||||||
|
// ประกาศ queue
|
||||||
|
channel.QueueDeclare(queue: "checkin-queue",
|
||||||
|
durable: true,
|
||||||
|
exclusive: false,
|
||||||
|
autoDelete: false,
|
||||||
|
arguments: null);
|
||||||
|
|
||||||
|
return channel;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
IdentityModelEventSource.ShowPII = true;
|
IdentityModelEventSource.ShowPII = true;
|
||||||
|
|
||||||
builder.Services.AddHttpContextAccessor();
|
builder.Services.AddHttpContextAccessor();
|
||||||
|
|
@ -89,6 +136,8 @@ var builder = WebApplication.CreateBuilder(args);
|
||||||
builder.Services.AddPersistence(builder.Configuration);
|
builder.Services.AddPersistence(builder.Configuration);
|
||||||
builder.Services.AddLeavePersistence(builder.Configuration);
|
builder.Services.AddLeavePersistence(builder.Configuration);
|
||||||
|
|
||||||
|
builder.Services.AddSingleton<RabbitCheckInService>();
|
||||||
|
|
||||||
builder.Services.AddControllers(options =>
|
builder.Services.AddControllers(options =>
|
||||||
{
|
{
|
||||||
options.SuppressAsyncSuffixInActionNames = false;
|
options.SuppressAsyncSuffixInActionNames = false;
|
||||||
|
|
|
||||||
24
BMA.EHR.Leave/Services/RabbitCheckInService.cs
Normal file
24
BMA.EHR.Leave/Services/RabbitCheckInService.cs
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
using RabbitMQ.Client;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace BMA.EHR.Leave.Service.Services
|
||||||
|
{
|
||||||
|
public class RabbitCheckInService
|
||||||
|
{
|
||||||
|
private readonly IModel _channel;
|
||||||
|
|
||||||
|
public RabbitCheckInService(IModel channel)
|
||||||
|
{
|
||||||
|
_channel = channel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SendMessageToQueue(string queueName, byte[] body)
|
||||||
|
{
|
||||||
|
//var body = Encoding.UTF8.GetBytes(message);
|
||||||
|
_channel.BasicPublish(exchange: "",
|
||||||
|
routingKey: queueName,
|
||||||
|
basicProperties: null,
|
||||||
|
body: body);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue