2021-03-17 12:07:14 +00:00
using System.Threading.Tasks ;
2020-11-23 15:46:42 +00:00
using Elsa.Activities.AzureServiceBus.Services ;
2020-11-22 21:16:28 +00:00
using Elsa.ActivityResults ;
using Elsa.Attributes ;
using Elsa.Serialization ;
using Elsa.Services ;
using Elsa.Services.Models ;
2020-11-23 15:46:42 +00:00
namespace Elsa.Activities.AzureServiceBus
2020-11-22 21:16:28 +00:00
{
2021-03-07 12:00:23 +00:00
[Action(Category = "Azure Service Bus", DisplayName = "Send Service Bus Message", Description = "Sends a message to the specified queue", Outcomes = new[] { OutcomeNames . Done } ) ]
2021-03-14 11:10:31 +00:00
public class SendAzureServiceBusQueueMessage : Activity
2020-11-22 21:16:28 +00:00
{
2020-11-23 15:46:42 +00:00
private readonly IMessageSenderFactory _messageSenderFactory ;
2020-11-22 21:16:28 +00:00
private readonly IContentSerializer _serializer ;
2021-03-14 11:10:31 +00:00
public SendAzureServiceBusQueueMessage ( IMessageSenderFactory messageSenderFactory , IContentSerializer serializer )
2020-11-22 21:16:28 +00:00
{
2020-11-23 15:46:42 +00:00
_messageSenderFactory = messageSenderFactory ;
2020-11-22 21:16:28 +00:00
_serializer = serializer ;
}
[ActivityProperty] public string QueueName { get ; set ; } = default ! ;
[ActivityProperty] public object Message { get ; set ; } = default ! ;
2020-12-02 21:28:36 +00:00
protected override async ValueTask < IActivityExecutionResult > OnExecuteAsync ( ActivityExecutionContext context )
2020-11-22 21:16:28 +00:00
{
2020-12-02 21:28:36 +00:00
var sender = await _messageSenderFactory . GetSenderAsync ( QueueName , context . CancellationToken ) ;
2021-03-14 11:10:31 +00:00
var message = Extensions . MessageBodyExtensions . CreateMessage ( _serializer , Message ) ;
2020-11-22 21:16:28 +00:00
if ( ! string . IsNullOrWhiteSpace ( context . WorkflowExecutionContext . CorrelationId ) )
message . CorrelationId = context . WorkflowExecutionContext . CorrelationId ;
await sender . SendAsync ( message ) ;
return Done ( ) ;
}
}
}