Beispiel #1
0
        public void UsingPublishSubscribeChannels()
        {
            PublishSubscribeChannel channel = new PublishSubscribeChannel();

            channel.Subscribe(new SimpleMessageHandler("Handler-1"));
            channel.Subscribe(new SimpleMessageHandler("Handler-2"));

            IMessage diningMessage =
                MessageBuilder.WithPayload("Hello World").Build();

            channel.Send(diningMessage);
            channel.Send(diningMessage);
            channel.Send(diningMessage);
        }
        public void HandlerThrowsExceptionPublishSubscribeWithExecutor()
        {
            services.AddSingleton <IDestinationResolver <IMessageChannel>, DefaultMessageChannelDestinationResolver>();
            services.AddSingleton <IMessageBuilderFactory, DefaultMessageBuilderFactory>();
            services.AddSingleton <IMessageChannel>((p) => new DirectChannel(p.GetService <IApplicationContext>(), "errorChannel"));
            var provider = services.BuildServiceProvider();

            var defaultErrorChannel = provider.GetService <IMessageChannel>() as DirectChannel;
            var channel             = new PublishSubscribeChannel(provider.GetService <IApplicationContext>(), TaskScheduler.Default);
            var resultHandler       = new ResultHandler(latch);
            var throwingHandler     = new ThrowMessageExceptionHandler();

            channel.Subscribe(throwingHandler);
            defaultErrorChannel.Subscribe(resultHandler);
            var message = IntegrationMessageBuilder.WithPayload("test").Build();

            channel.Send(message);
            Assert.True(latch.Wait(10000));
            var errorMessage = resultHandler.LastMessage;

            Assert.IsType <MessagingException>(errorMessage.Payload);
            var exceptionPayload = (MessagingException)errorMessage.Payload;

            Assert.IsType <NotSupportedException>(exceptionPayload.InnerException);
            Assert.Same(message, exceptionPayload.FailedMessage);
            Assert.NotEqual(Thread.CurrentThread.ManagedThreadId, resultHandler.LastThread.ManagedThreadId);
        }
Beispiel #3
0
    public void PublishSubscribeChannel_Send_10_000_000_TwoHandlers()
    {
        var services = new ServiceCollection();

        services.AddSingleton <IIntegrationServices, IntegrationServices>();
        var provider = services.BuildServiceProvider();
        var channel  = new PublishSubscribeChannel(provider);
        var handler1 = new CounterHandler();
        var handler2 = new CounterHandler();

        channel.Subscribe(handler1);
        channel.Subscribe(handler2);
        var message = new GenericMessage("test");

        for (var i = 0; i < 10_000_000; i++)
        {
            channel.Send(message);
        }
        if (handler1.Count != 10_000_000)
        {
            throw new InvalidOperationException("Handler count1 invalid");
        }
        if (handler2.Count != 10_000_000)
        {
            throw new InvalidOperationException("Handler count2 invalid");
        }
    }
 private static void SimpleMessageHandlerEventing()
 {
     PublishSubscribeChannel channel = new PublishSubscribeChannel();
     channel.Subscribe(new SimpleMessageHandler("one"));
     channel.Subscribe(new SimpleMessageHandler("two"));
     IMessage message = MessageBuilder.WithPayload("foo").Build();
     channel.Send(message);
 }
Beispiel #5
0
        private static void SimpleMessageHandlerEventing()
        {
            PublishSubscribeChannel channel = new PublishSubscribeChannel();

            channel.Subscribe(new SimpleMessageHandler("one"));
            channel.Subscribe(new SimpleMessageHandler("two"));
            IMessage message = MessageBuilder.WithPayload("foo").Build();

            channel.Send(message);
        }
        public void HandlerThrowsExceptionPublishSubscribeWithoutScheduler()
        {
            var provider = services.BuildServiceProvider();
            var channel  = new PublishSubscribeChannel(provider.GetService <IApplicationContext>());
            var handler  = new ThrowingHandler();

            channel.Subscribe(handler);
            var message = IntegrationMessageBuilder.WithPayload("test").Build();

            Assert.Throws <MessageDeliveryException>(() => channel.Send(message));
        }
        public void TestSendOneHandler_10_000_000()
        {
            var services = new ServiceCollection();

            services.AddSingleton <IIntegrationServices, IntegrationServices>();
            var provider = services.BuildServiceProvider();
            var handler  = new CounterHandler();
            var channel  = new PublishSubscribeChannel(provider);

            channel.Subscribe(handler);
            var message = new GenericMessage("test");

            Assert.True(channel.Send(message));
            for (var i = 0; i < 10000000; i++)
            {
                channel.Send(message);
            }

            Assert.Equal(10000001, handler.Count);
        }
Beispiel #8
0
        public void Should_return_false_if_there_are_no_subscribers()
        {
            Fiber fiber = new SynchronousFiber();

            Channel<UserUpdate> channel = new PublishSubscribeChannel<UserUpdate>(fiber, new Channel<UserUpdate>[] {});

            var update = new UserUpdate();

            channel.Send(update);

            // exception here? or just ignore
        }
Beispiel #9
0
    public void PublishSubscribeChannel_Send_10_000_000_SingleHandler()
    {
        var services = new ServiceCollection();

        services.AddSingleton <IIntegrationServices, IntegrationServices>();
        var provider = services.BuildServiceProvider();
        var channel  = new PublishSubscribeChannel(provider.GetService <IApplicationContext>());
        var handler  = new CounterHandler();

        channel.Subscribe(handler);
        var message = Message.Create("test");

        channel.Send(message);
        for (var i = 0; i < 10_000_000; i++)
        {
            channel.Send(message);
        }
        if (handler.Count != 10_000_000 + 1)
        {
            throw new InvalidOperationException("Handler count invalid");
        }
    }
        public void HandlerThrowsExceptionPublishSubscribeWithoutScheduler()
        {
            var services = new ServiceCollection();

            services.AddSingleton <IIntegrationServices, IntegrationServices>();
            var provider = services.BuildServiceProvider();
            var channel  = new PublishSubscribeChannel(provider);
            var handler  = new ThrowingHandler();

            channel.Subscribe(handler);
            var message = MessageBuilder.WithPayload("test").Build();

            Assert.Throws <MessageDeliveryException>(() => channel.Send(message));
        }
        public void TestSend()
        {
            var services = new ServiceCollection();

            services.AddSingleton <IIntegrationServices, IntegrationServices>();
            var provider = services.BuildServiceProvider();
            var handler  = new CounterHandler();
            var channel  = new PublishSubscribeChannel(provider.GetService <IApplicationContext>());

            channel.Subscribe(handler);
            var message = Message.Create("test");

            Assert.True(channel.Send(message));
            Assert.Equal(1, handler.Count);
        }
Beispiel #12
0
        public void Should_filter_out_unwanted_messages()
        {
            var update = new UserUpdate {LastActivity = DateTime.Now - 5.Minutes()};

            Fiber fiber = new SynchronousFiber();

            var future = new Future<UserUpdate>();

            var filter = new FilterChannel<UserUpdate>(fiber, future, x => x.LastActivity > DateTime.Now);

            Channel<UserUpdate> channel = new PublishSubscribeChannel<UserUpdate>(fiber, new[] {filter});

            channel.Send(update);

            Assert.IsFalse(future.WaitUntilCompleted(1.Seconds()));
        }
Beispiel #13
0
        public void Should_schedule_events()
        {
            var update = new UserUpdate {LastActivity = DateTime.Now - 5.Minutes()};

            Fiber fiber = new SynchronousFiber();

            var future = new Future<UserUpdate>();

            Channel<UserUpdate> channel = new PublishSubscribeChannel<UserUpdate>(fiber, new Channel<UserUpdate>[] {future});

            var scheduler = new TimerFiberScheduler(fiber);

            scheduler.Schedule(1000, fiber, () => channel.Send(update));

            Thread.Sleep(500);

            Assert.IsFalse(future.WaitUntilCompleted(0.Seconds()));

            Assert.IsTrue(future.WaitUntilCompleted(1.Seconds()));
        }
        public void UsingPublishSubscribeChannels()
        {
            PublishSubscribeChannel channel = new PublishSubscribeChannel();

            channel.Subscribe(new SimpleMessageHandler("Handler-1"));
            channel.Subscribe(new SimpleMessageHandler("Handler-2"));

            IMessage diningMessage =
                MessageBuilder.WithPayload("Hello World").Build();

            channel.Send(diningMessage);
            channel.Send(diningMessage);
            channel.Send(diningMessage);
        }