Пример #1
0
        public async Task ResolvesHandlersPolymorphically_ConcreteCaseWithFailedMessage()
        {
            var handlerActivator = _activationCtx.CreateActivator(handlers => handlers.Register <SecondLevelDeliveryHandler>());

            using (var scope = new RebusTransactionScope())
            {
                var headers  = new Dictionary <string, string>();
                var body     = new FailedMessage();
                var wrapper  = new FailedMessageWrapper <FailedMessage>(headers, body, "bla bla", new Exception[0]);
                var handlers = (await handlerActivator.GetHandlers(wrapper, scope.TransactionContext)).ToList();

                const string message = @"Expected that a single SecondLevelDeliveryHandler instance would have been returned because it implements IHandleMessages<IFailed<FailedMessage>> and we resolved handlers for a FailedMessageWrapper<FailedMessage>";

                Assert.That(handlers.Count, Is.EqualTo(1), message);
                Assert.That(handlers[0], Is.TypeOf <SecondLevelDeliveryHandler>(), message);
            }
        }
Пример #2
0
        public async Task CanGetFailedMessageHandler()
        {
            var headers = new Dictionary <string, string> {
                { Headers.MessageId, Guid.NewGuid().ToString() }
            };
            var body    = new SomeMessage();
            var wrapper = new FailedMessageWrapper <SomeMessage>(
                headers: headers,
                message: body,
                errorDescription: "something went bad",
                exceptions: new[] { new Exception("oh noes!") }
                );

            var handlerActivator = _activationCtx.CreateActivator(r => r.Register <SomeMessageHandler>());

            Console.WriteLine(@"
Resolving handlers for message created like this:

var wrapper = new FailedMessageWrapper<SomeMessage>(
    headers: headers,
    message: body,
    errorDescription: ""something went bad"",
    exceptions: new[] {new Exception(""oh noes!"")}
);

(this is a FailedMessageWrapper<>, which is the wrapper that will be
dispatched when 2nd level retries are enabled, and the initial message
has failed too many times)
            ");

            using (var scope = new FakeMessageContextScope())
            {
                var handlers = (await handlerActivator.GetHandlers(wrapper, scope.TransactionContext)).ToList();

                Assert.That(handlers.Count, Is.EqualTo(1), "Expected one single handler instance of type SomeMessageHandler");
                Assert.That(handlers.First(), Is.TypeOf <SomeMessageHandler>());
            }
        }