public async Task RabbitMqBus_PublishSubscribe_Test() { var options = CreateOptions(); var logger = CommonUtils.CreateLogger <RabbitMqBus>(); var rabbitMqBus = new RabbitMqBus(options, logger); var rabbitMqListener = new RabbitMqListener(options, logger); var message = new TestMessage { Id = "1", String = "Test string", }; var count = 0; TestMessage result = null; rabbitMqListener.Subscribe("test", (TestMessage m) => { result = m; return(Task.FromResult(count++)); }, InteractionType.PublishSubscribe); var count2 = 0; TestMessage result2 = null; rabbitMqListener.Subscribe("test", (TestMessage m) => { result2 = m; return(Task.FromResult(count2++)); }, InteractionType.PublishSubscribe); await rabbitMqBus.Publish("test", message, InteractionType.PublishSubscribe); await rabbitMqBus.Publish("test", message, InteractionType.PublishSubscribe); await TimeSpan.FromSeconds(1) .StopOnCondition(TimeSpan.FromMilliseconds(100), () => count >= 2 && count2 >= 2); count.ShouldBe(2); result.ShouldNotBeNull(); result.Id.ShouldBe(message.Id); result.String.ShouldBe(message.String); count2.ShouldBe(2); result2.ShouldNotBeNull(); result2.Id.ShouldBe(message.Id); result2.String.ShouldBe(message.String); }
public void ConfigureServices(IServicecollection services) { services.Add.... // All your stuff // If this service will also publish events, add that Service as well (scoped!) services.AddScoped <IMeshEventPublisher, RabbitMqEventPublisher>(s => new RabbitMqEventPublisher(rabbitConfig)); // Since this service will be a singleton, wait until the end to actually add it // to the servicecollection - otherwise BuildServiceProvider would duplicate it RabbitMqListener rabbitMqListener = new RabbitMqListener(rabbitConfig, services.BuildServiceProvider()); var nodeEventSubs = Configuration.GetSection( $"RabbitMQ:SubscribedEventIds:ServiceA").Get <string[]>(); // Attach our list of events to a handler // Handler must implement IMeshEventProcessor and does have // access to the IServiceProvider so can use DI rabbitMqListener.Subscribe <ServiceAEventProcessor>(nodeEventSubs); services.AddSingleton(rabbitMqListener); }