Quantcast
Channel: Active questions tagged consumer - Stack Overflow
Viewing all articles
Browse latest Browse all 87

Consumer for type's messages "RoutingSlipActivityCompleted"

$
0
0

I've a code in which a routing slip is built. A consumer for consuming the completion of each routing slip's activity is built too but this part is never reached.This is the part in which the routing slip is built:

public class UpsertCredentialConsumer : IConsumer<IUpsertCredentialRequest>, IConsumer<RoutingSlipCompleted>, IConsumer<RoutingSlipFaulted>{    private readonly ILogger<UpsertCredentialConsumer> _logger;    public UpsertCredentialConsumer(ILogger<UpsertCredentialConsumer> logger)    {        _logger = logger;    }    public async Task Consume(ConsumeContext<IUpsertCredentialRequest> context)    {        var routingSlip = CreateRoutingSlip(context);        await context.Execute(routingSlip);    }    private RoutingSlip CreateRoutingSlip(ConsumeContext<IUpsertCredentialRequest> context)    {        var builder = new RoutingSlipBuilder(NewId.NextGuid());        builder.SetVariables(new        {            context.RequestId,            context.ResponseAddress        });        foreach(var cred in context.Message.AgdtCredential)        {            //Se credential non presente            if (cred.AsIsCredential is null)            {                //InsertCredential                AddInsertCredentialActivity(builder, context.Message, cred.Credential);                //InsertExternalRefeCredential                builder.AddActivity(XXX.Name, XXX.Queue,                new                {                 ...                });            }            //Se credential presente            if (cred.AsIsCredential is not null)            {                //UpdateCredential                AddUpdateCredentialActivity(builder, context.Message, cred.Credential, cred.AsIsCredential);                if (!cred.Credential.Status.Equals(cred.AsIsCredential.Status))                {                    //SetCredentialStatus se lo stato da settare è diverso da quello esistente                    builder.AddActivity(YYY.Name, YYY.Queue,                    new                    {                     ...                    });                }            }            else            {                //SetCredentialStatus                builder.AddActivity(YYY.Name, YYY.Queue,                new                {                 ...                });            }        }        builder.AddSubscription(context.ReceiveContext.InputAddress, RoutingSlipEvents.Completed & RoutingSlipEvents.Faulted & RoutingSlipEvents.ActivityCompleted);        return builder.Build();    }    public async Task Consume(ConsumeContext<RoutingSlipCompleted> context)    {        _logger.LogTrace("(IUpsertCredentialRequest) Routing Slip Completed: {TrackingNumber}", context.Message.TrackingNumber);        var requestId = context.GetVariable<Guid>("RequestId");        var responseAddress = context.GetVariable<Uri>("ResponseAddress");        var responseEndpoint = await context.GetSendEndpoint(responseAddress);        await responseEndpoint.Send<IUpsertCredentialResult>(            new            {                Success = true,                __RequestId = requestId,                Data = context.Message.Variables["credentialId"]            });    }    public async Task Consume(ConsumeContext<RoutingSlipFaulted> context)    {        _logger.LogTrace("(IUpsertCredentialRequest) Routing Slip Faulted: {TrackingNumber} {ExceptionInfo}",                                            context.Message.TrackingNumber,                                            context.Message.ActivityExceptions.FirstOrDefault());        var requestId = context.GetVariable<Guid>("RequestId");        var responseAddress = context.GetVariable<Uri>("ResponseAddress");        if (requestId.HasValue && responseAddress != null)        {            var responseEndpoint = await context.GetSendEndpoint(responseAddress);            var validationError = context.Message.Variables.TryGetValue("ErrorCode", out object errorValidation);            var exceptions = context.Message.ActivityExceptions.Select(x => x.ExceptionInfo);            var errorCode = errorValidation is null ? exceptions.Select(x => x.Message).FirstOrDefault()                                                    : ScsExceptions.ScsValidationError.ToString();            _logger.LogTrace("{TrackingNumber} ErrorCode: {error}", context.Message.TrackingNumber, errorCode);            await responseEndpoint.Send<IUpsertCredentialResult>(                    new                    {                        Success = false,                        ErrorCode = errorCode,                        __RequestId = requestId                    });        }    }

And this is the consumer of RoutingSlipActivityCompleted message:

public class RoutingSlipEventConsumer : IConsumer<RoutingSlipActivityCompleted>, IConsumer<RoutingSlipFaulted>{    private readonly ILogger<RoutingSlipEventConsumer> _logger;    public RoutingSlipEventConsumer(ILogger<RoutingSlipEventConsumer> logger)    {        _logger = logger;    }    public Task Consume(ConsumeContext<RoutingSlipActivityCompleted> context)    {        _logger.LogInformation("Routing Slip Activity Completed: {TrackingNumber} {ActivityName}",                                           context.Message.TrackingNumber,                                           context.Message.ActivityName);        return Task.CompletedTask;    }    public Task Consume(ConsumeContext<RoutingSlipFaulted> context)    {        _logger.LogInformation("Routing Slip Faulted: {TrackingNumber} {ExceptionInfo}",                                           context.Message.TrackingNumber,                                           context.Message.ActivityExceptions.FirstOrDefault());        return Task.CompletedTask;    }}

For precision, this is also the code's part in which the consumer are registered:

services.AddMassTransit(x =>{    x.AddConsumer<allTheOtherConsumer>().Endpoint(x=> x.Temporary = true);    x.AddConsumer<RoutingSlipEventConsumer>().Endpoint(x => x.Temporary = true);    x.UsingRabbitMq((context, cfg) =>    {         cfg.Host(...);        cfg.ConfigureEndpoints(context);    });});

I'm expecting that the RoutingSlipEventConsumer take the message RoutingSlipActivityCompleted and write the linked informations in the log's file, but it's never happened


Viewing all articles
Browse latest Browse all 87

Trending Articles