GetConsumer <TMessage>(IConsumeContext <TMessage> context, InstanceHandlerSelector <TConsumer, TMessage> selector) where TMessage : class { IEnumerable <Action <IConsumeContext <TMessage> > > consumers = _consumerFactory.GetConsumer(context, selector); foreach (var action in consumers) { Action <IConsumeContext <TMessage> > consumer = action; yield return(message => { var received = new ReceivedMessageImpl <TMessage>(message); try { consumer(message); } catch (Exception ex) { received.SetException(ex); } finally { _received.Add(received); } }); } }
void HandleMessage(IConsumeContext <TSubject> context) { var received = new ReceivedMessageImpl <TSubject>(context); try { using (context.CreateScope()) { _handler(context, context.Message); } } catch (Exception ex) { received.SetException(ex); } finally { _received.Add(received); } }
public IEnumerable <Action <IConsumeContext <TMessage> > > GetSaga <TMessage>(IConsumeContext <TMessage> context, Guid sagaId, InstanceHandlerSelector <TSaga, TMessage> selector, ISagaPolicy <TSaga, TMessage> policy) where TMessage : class { ISagaPolicy <TSaga, TMessage> sagaPolicy = new SagaPolicyTestDecorator <TSaga, TMessage>(policy, sagaId, _created); InstanceHandlerSelector <TSaga, TMessage> interceptSelector = (s, c) => { IEnumerable <Action <IConsumeContext <TMessage> > > result = selector(s, c); return(DecorateSelector(s, result)); }; IEnumerable <Action <IConsumeContext <TMessage> > > consumers = _sagaRepository.GetSaga(context, sagaId, interceptSelector, sagaPolicy); foreach (var action in consumers) { Action <IConsumeContext <TMessage> > consumer = action; yield return(message => { var received = new ReceivedMessageImpl <TMessage>(message); try { consumer(message); } catch (Exception ex) { received.SetException(ex); } finally { _received.Add(received); } }); } }
public void Receive(Func <IReceiveContext, Action <IReceiveContext> > receiver, TimeSpan timeout) { _endpoint.Receive(receiveContext => { var decoratedReceiveContext = new ReceiveContextTestDecorator(receiveContext, _scenario); Action <IReceiveContext> receive = receiver(decoratedReceiveContext); if (receive == null) { var skipped = new ReceivedMessageImpl(receiveContext); _scenario.AddSkipped(skipped); return(null); } return(context => { decoratedReceiveContext = new ReceiveContextTestDecorator(context, _scenario); var received = new ReceivedMessageImpl(context); try { receive(decoratedReceiveContext); } catch (Exception ex) { received.SetException(ex); throw; } finally { _received.Add(received); _scenario.AddReceived(received); } }); }, timeout); }