public static UnsubscribeAction Subscribe <TMessage, TKey>(this IMessagePipeline pipeline, TKey correlationId, IEndpoint endpoint) where TMessage : class, CorrelatedBy <TKey> { var correlatedConfigurator = CorrelatedMessageRouterConfigurator.For(pipeline); var router = correlatedConfigurator.FindOrCreate <TMessage, TKey>(); UnsubscribeAction result = router.Connect(correlationId, new EndpointMessageSink <TMessage>(endpoint)); return(result); }
protected virtual UnsubscribeAction Connect <TMessage, TKey>(ISubscriberContext context, Consumes <TMessage> .For <TKey> consumer) where TMessage : class, CorrelatedBy <TKey> { var correlatedConfigurator = CorrelatedMessageRouterConfigurator.For(context.Pipeline); var router = correlatedConfigurator.FindOrCreate <TMessage, TKey>(); UnsubscribeAction result = router.Connect(consumer.CorrelationId, new InstanceMessageSink <TMessage>(message => consumer.Consume)); UnsubscribeAction remove = context.SubscribedTo <TMessage, TKey>(consumer.CorrelationId); return(() => result() && remove()); }