コード例 #1
0
        public async Task ShouldPublishEvent2()
        {
            // arange
            string topic     = Guid.NewGuid().ToString();
            var    processor = new TestMessageProcessor();

            host.RegisterMessageProcessor(topic + "TestEvent", processor);

            var settings = publisterSettings.Copy();

            settings.Topic = topic;
            var publisher     = new DomainEventPublisher(settings, new NullLogger <DomainEventPublisher>());
            var correlationId = Guid.NewGuid().ToString();

            // act
            var @event = new TestEvent()
            {
                IntValue = random.Next(), StringValue = Guid.NewGuid().ToString()
            };
            await publisher.PublishAsync(@event, correlationId).ConfigureAwait(false);

            // assert
            Assert.Single(processor.Messages);
            var message = processor.Messages[0];

            Assert.Equal(@event.IntValue, JsonConvert.DeserializeObject <TestEvent>(message.GetBody <string>()).IntValue);
            Assert.Equal(@event.StringValue, JsonConvert.DeserializeObject <TestEvent>(message.GetBody <string>()).StringValue);
            Assert.Equal(@event.GetType().FullName, message.ApplicationProperties[Constants.MESSAGE_TYPE_KEY]);
            Assert.Equal(correlationId, message.Properties.CorrelationId);
        }
コード例 #2
0
        public async Task ShouldPublishWithUsing()
        {
            // arrange
            string         topic     = Guid.NewGuid().ToString();
            List <Message> messages  = new List <Message>();
            var            processor = new TestMessageProcessor(50, messages);

            host.RegisterMessageProcessor(topic + "TestEvent", processor);

            var settings = publisterSettings.Copy();

            settings.Topic = topic;
            var count = 10;

            // act
            using (var publisher = new DomainEventPublisher(settings, new NullLogger <DomainEventPublisher>())) {
                publisher.Connect();
                for (int i = 0; i < count; i++)
                {
                    var @event = new TestEvent()
                    {
                        IntValue = random.Next(), StringValue = Guid.NewGuid().ToString()
                    };
                    await publisher.PublishAsync(@event).ConfigureAwait(false);
                }
            }

            // assert
            Assert.Equal(count, processor.Messages.Count);
        }
コード例 #3
0
 public Task Handle(EntityCreated <T> notification, CancellationToken cancellationToken)
 {
     return(_eventPublisher.PublishAsync(new
     {
         event_type = "entity-created",
         event_data = notification.Entity
     }, cancellationToken));
 }
コード例 #4
0
        public async Task ShouldReceiveMessage_RejectAsync()
        {
            receiverSettings.Queue = Guid.NewGuid().ToString();

            List <Message> messages = new List <Message>();

            host.RegisterMessageProcessor(receiverSettings.Queue + "TestEvent", new TestMessageProcessor(50, messages));
            linkProcessor = new TestLinkProcessor();
            host.RegisterLinkProcessor(linkProcessor);

            int count = 1;

            publisterSettings.Topic = receiverSettings.Queue;
            var publisher = new DomainEventPublisher(publisterSettings, new NullLogger <DomainEventPublisher>());

            for (int i = 0; i < count; i++)
            {
                var @event = new TestEvent()
                {
                    IntValue = random.Next(), StringValue = Guid.NewGuid().ToString()
                };
                await publisher.PublishAsync(@event).ConfigureAwait(false);
            }

            var source = new TestMessageSource(new Queue <Message>(messages));

            host.RegisterMessageSource(receiverSettings.Queue, source);
            using (var receiver = new DomainEventReceiver(receiverSettings, provider, new NullLogger <DomainEventReceiver>())) {
                receiver.Start(eventTypes);
                int waits = 0;
                do
                {
                    await Task.Delay(1000).ConfigureAwait(false);

                    if (receiver.Link.LinkState == LinkState.Attached)
                    {
                        break;
                    }
                    waits++;
                }while (waits < 20);

                for (int i = 0; i < count; i++)
                {
                    var message = receiver.Receive(TimeSpan.FromSeconds(10));
                    message.Reject();
                    await Task.Delay(1000).ConfigureAwait(false);
                }
            }

            Assert.Equal(count, source.DeadLetterCount);
            Assert.Equal(0, source.Count);
        }
コード例 #5
0
        public async Task ShouldReceiveMessage_Accept()
        {
            receiverSettings.Queue = Guid.NewGuid().ToString();

            List <Message> messages = new List <Message>();

            host.RegisterMessageProcessor(receiverSettings.Queue + "TestEvent", new TestMessageProcessor(50, messages));
            linkProcessor = new TestLinkProcessor();
            host.RegisterLinkProcessor(linkProcessor);

            int count = 1;

            publisterSettings.Topic = receiverSettings.Queue;
            var publisher = new DomainEventPublisher(publisterSettings, new NullLogger <DomainEventPublisher>());

            for (int i = 0; i < count; i++)
            {
                var @event = new TestEvent()
                {
                    IntValue = random.Next(), StringValue = Guid.NewGuid().ToString()
                };
                await publisher.PublishAsync(@event).ConfigureAwait(false);
            }

            var source = new TestMessageSource(new Queue <Message>(messages));

            host.RegisterMessageSource(receiverSettings.Queue, source);
            using (var receiver = new DomainEventReceiver(receiverSettings, provider, new NullLogger <DomainEventReceiver>())) {
                receiver.Start(eventTypes);
                for (int i = 0; i < count; i++)
                {
                    var message = receiver.Receive(TimeSpan.FromSeconds(1));
                    Assert.NotNull(message.GetData <TestEvent>());
                    message.Accept();
                }
            }

            Assert.Equal(0, source.DeadLetterCount);
            Assert.Equal(0, source.Count);
        }
コード例 #6
0
        public async Task ShouldPublishEvent1WithSerializationSettings()
        {
            // arrange
            string topic     = Guid.NewGuid().ToString();
            var    processor = new TestMessageProcessor();

            host.RegisterMessageProcessor(topic + "TestEvent", processor);

            var settings = publisterSettings.Copy();

            settings.Topic = topic;
            settings.SerializerSettings = new JsonSerializerSettings()
            {
                Converters = new List <JsonConverter> {
                    new StringEnumConverter(new CamelCaseNamingStrategy())
                }
            };
            var publisher = new DomainEventPublisher(settings, new NullLogger <DomainEventPublisher>());

            // act
            var @event = new TestEvent()
            {
                IntValue = random.Next(), StringValue = Guid.NewGuid().ToString(), Status = StatusEnum.PendingWork
            };
            await publisher.PublishAsync(@event).ConfigureAwait(false);

            // assert
            Assert.Single(processor.Messages);
            var message = processor.Messages[0];
            var body    = message.GetBody <string>();

            Assert.Contains("\"Status\":\"pendingWork\"", body);
            Assert.Equal(@event.IntValue, JsonConvert.DeserializeObject <TestEvent>(body).IntValue);
            Assert.Equal(@event.StringValue, JsonConvert.DeserializeObject <TestEvent>(body).StringValue);
            Assert.Equal(@event.Status, JsonConvert.DeserializeObject <TestEvent>(body).Status);
            Assert.Equal(@event.GetType().FullName, message.ApplicationProperties[Constants.MESSAGE_TYPE_KEY]);
        }