public void ThrowsAnExceptionWhenTheItemIsNull() { var consumer = new Mock <IConsumer <object> >(); var target = new ConsumerRunner <object>(consumer.Object); Assert.Throws <ArgumentNullException>(() => target.Run(null, CancellationToken.None)); }
public void RunsTheConsumerCorrectly() { var consumer = new Mock <IConsumer <object> >(); var item = new Mock <IProducedItem>(); item.Setup(o => o.GetItem <object>()).Returns((object)null); var target = new ConsumerRunner <object>(consumer.Object); target.Run(item.Object, CancellationToken.None); consumer.Verify(o => o.Consume(null, CancellationToken.None), Times.Once); }
private async Task DistributedStart() { try { if (Interlocked.CompareExchange(ref distributedMonitorTimeLock, 1, 0) == 0) { var consumers = rabbitEventBusContainer.GetConsumers(); foreach (var consumer in consumers) { if (consumer is RabbitConsumer value) { for (int i = 0; i < value.QueueList.Count(); i++) { var queue = value.QueueList[i]; var key = queue.ToString(); if (!Runners.ContainsKey(key)) { var weight = 100000 - Runners.Count; var(isOk, lockId, expectMillisecondDelay) = await grainFactory.GetGrain <IWeightHoldLock>(key).Lock(weight, lockHoldingSeconds); if (isOk) { if (Runners.TryAdd(key, lockId)) { var runner = new ConsumerRunner(client, provider, value, queue); ConsumerRunners.TryAdd(key, runner); await runner.Run(); } } } } } } Interlocked.Exchange(ref distributedMonitorTimeLock, 0); if (logger.IsEnabled(LogLevel.Information)) { logger.LogInformation("EventBus Background Service is working."); } } } catch (Exception exception) { logger.LogError(exception.InnerException ?? exception, nameof(DistributedStart)); Interlocked.Exchange(ref distributedMonitorTimeLock, 0); } }
public static void AddEventBusRabbitMQTransport( this StartupConfig startupOption, Action <RabbitOptions> rabbitConfigAction, Func <IRabbitEventBusContainer, Task> eventBusConfig = default) { startupOption.Services.Configure <RabbitOptions>(config => rabbitConfigAction(config)); startupOption.Services.AddSingleton <IRabbitMQClient, RabbitMQClient>(); startupOption.Services.AddSingleton <IRabbitEventBusContainer, EventBusContainer>(); startupOption.Services.AddSingleton <IProducer, RabbitProducer>(); startupOption.Services.AddSingleton(serviceProvider => serviceProvider.GetService <IRabbitEventBusContainer>() as IProducerInfoContainer); StartupBuilder.Register(async serviceProvider => { var container = serviceProvider.GetService <IRabbitEventBusContainer>(); var client = serviceProvider.GetService <IRabbitMQClient>(); var rabbitOptions = serviceProvider.GetService <IOptions <RabbitOptions> >().Value; if (eventBusConfig != default) { await eventBusConfig(container); } else { await container.AutoRegister(); } var consumers = container.GetConsumers(); foreach (var consumer in consumers) { if (consumer is RabbitConsumer value) { var queue = value.QueueInfo; var key = queue.Queue; var runner = new ConsumerRunner(client, serviceProvider, value, queue, rabbitOptions); ConsumerRunners.TryAdd(key, runner); await runner.Run(); } } }); }