mirror of
https://github.com/bitwarden/server.git
synced 2025-06-17 00:03:17 -05:00

* [PM-17562] Add strict delay support for RabbitMQ * fix lint error * Added more robust FailureReason handling and some additional tests * Fix two issues noted by SonarQube * Fix typo; Add alternate handling if MessageId is null or empty * Set MessageId on all message publishers
71 lines
2.3 KiB
C#
71 lines
2.3 KiB
C#
using Azure.Messaging.ServiceBus;
|
|
using Bit.Core.AdminConsole.Models.Data.Integrations;
|
|
using Bit.Core.Enums;
|
|
using Bit.Core.Settings;
|
|
|
|
namespace Bit.Core.Services;
|
|
|
|
public class AzureServiceBusService : IAzureServiceBusService
|
|
{
|
|
private readonly ServiceBusClient _client;
|
|
private readonly ServiceBusSender _eventSender;
|
|
private readonly ServiceBusSender _integrationSender;
|
|
|
|
public AzureServiceBusService(GlobalSettings globalSettings)
|
|
{
|
|
_client = new ServiceBusClient(globalSettings.EventLogging.AzureServiceBus.ConnectionString);
|
|
_eventSender = _client.CreateSender(globalSettings.EventLogging.AzureServiceBus.EventTopicName);
|
|
_integrationSender = _client.CreateSender(globalSettings.EventLogging.AzureServiceBus.IntegrationTopicName);
|
|
}
|
|
|
|
public ServiceBusProcessor CreateProcessor(string topicName, string subscriptionName, ServiceBusProcessorOptions options)
|
|
{
|
|
return _client.CreateProcessor(topicName, subscriptionName, options);
|
|
}
|
|
|
|
public async Task PublishAsync(IIntegrationMessage message)
|
|
{
|
|
var json = message.ToJson();
|
|
|
|
var serviceBusMessage = new ServiceBusMessage(json)
|
|
{
|
|
Subject = message.IntegrationType.ToRoutingKey(),
|
|
MessageId = message.MessageId
|
|
};
|
|
|
|
await _integrationSender.SendMessageAsync(serviceBusMessage);
|
|
}
|
|
|
|
public async Task PublishToRetryAsync(IIntegrationMessage message)
|
|
{
|
|
var json = message.ToJson();
|
|
|
|
var serviceBusMessage = new ServiceBusMessage(json)
|
|
{
|
|
Subject = message.IntegrationType.ToRoutingKey(),
|
|
ScheduledEnqueueTime = message.DelayUntilDate ?? DateTime.UtcNow,
|
|
MessageId = message.MessageId
|
|
};
|
|
|
|
await _integrationSender.SendMessageAsync(serviceBusMessage);
|
|
}
|
|
|
|
public async Task PublishEventAsync(string body)
|
|
{
|
|
var message = new ServiceBusMessage(body)
|
|
{
|
|
ContentType = "application/json",
|
|
MessageId = Guid.NewGuid().ToString()
|
|
};
|
|
|
|
await _eventSender.SendMessageAsync(message);
|
|
}
|
|
|
|
public async ValueTask DisposeAsync()
|
|
{
|
|
await _eventSender.DisposeAsync();
|
|
await _integrationSender.DisposeAsync();
|
|
await _client.DisposeAsync();
|
|
}
|
|
}
|