Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using AutoMapper;
- using EasyNetQ;
- using EventLibrary.Logic;
- using EventLibrary.Model.Events.From.Any;
- using EventLibrary.Model.Interfaces;
- using MediatR;
- using Micro2Go.Logic.Extensions;
- using Micro2Go.Model.Messaging.Core;
- namespace EventLibrary.Model.Abstract;
- // Zie ook : EventMappingProfile
- // Indien wijzigingen qua ctor params, zie ook MessageDispatcher
- #pragma warning disable CS8600
- #pragma warning disable CS8604
- public class AbstractConsumer {
- private readonly IMediator _mediator;
- private readonly IMapper _mapper;
- private readonly IEventBroker _eventBroker;
- public AbstractConsumer(IMediator mediator, IMapper mapper, IEventBroker eventBroker) {
- _mediator = mediator;
- _mapper = mapper;
- _eventBroker = eventBroker;
- }
- // TEvent -> TRequest
- public async Task Handle<TEvent, TRequest, TCommand>(TEvent message) where TEvent : ServiceEvent {
- try {
- await Handle<TRequest, TCommand>(
- _mapper.Map<TRequest>(
- message
- ),
- message.EventId
- );
- } catch (Exception e) {
- await _eventBroker.Publish(new FailedToProcessEvent(message.EventId, e));
- }
- }
- // TRequest -> TCommand (+ send)
- public async Task Handle<TRequest, TCommand>(TRequest message, Guid eventId) {
- Response? result;
- try {
- result = (Response)await _mediator.Send(
- _mapper.Map<TCommand>(
- message
- )
- );
- if (result is null || result.Success is false) {
- throw new Exception($"Failed to process message: {result?.ToJson() ?? "Could not cast to Response type"}");
- }
- } catch (Exception e) {
- await _eventBroker.Publish(new FailedToProcessEvent(eventId, e));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment