/// <summary> /// CookedRabbit RabbitMaintenanceService constructor. Allows for the sharing of a channel pool. If channel pool is not initialized, it will automatically initialize in here. /// </summary> /// <param name="rabbitSeasoning"></param> /// <param name="rcp"></param> /// <param name="logger"></param> public RabbitMaintenanceService(RabbitSeasoning rabbitSeasoning, IRabbitChannelPool rcp, ILogger logger = null) : base(rabbitSeasoning, rcp, logger) { Guard.AgainstNull(rabbitSeasoning, nameof(rabbitSeasoning)); Guard.AgainstNull(rcp, nameof(rcp)); _logger = logger; _seasoning = rabbitSeasoning; _rcp = rcp; if (!_rcp.IsInitialized) { _rcp.Initialize(rabbitSeasoning).GetAwaiter().GetResult(); } if (_seasoning.MaintenanceSettings.EnablePingPong) { _pingPong = PingPongAsync($"{_seasoning.MaintenanceSettings.PingPongQueueName}.{RandomString(5, 10)}", _cancellationTokenSource.Token); } if (_seasoning.MaintenanceSettings.ApiSettings.RabbitApiAccessEnabled) { var credentials = new NetworkCredential( _seasoning.MaintenanceSettings.ApiSettings.RabbitApiUserName, _seasoning.MaintenanceSettings.ApiSettings.RabbitApiUserPassword); _httpClient = CreateHttpClient(credentials, TimeSpan.FromSeconds(_seasoning.MaintenanceSettings.ApiSettings.RabbitApiTimeout)); } }
public static async Task PoolChannel_SendMessagesForeverAsync(IRabbitChannelPool rcp) { ResetThreadName(Thread.CurrentThread, "PoolChannel SendMessagesForever Thread"); int counter = 0; while (true) { var chanPair1 = await rcp.GetPooledChannelPairAsync(); var chanPair2 = await rcp.GetPooledChannelPairAsync(); var chanPair3 = await rcp.GetPooledChannelPairAsync(); var task1 = SendMessageAsync(chanPair1.Channel, counter++); var task2 = SendMessageAsync(chanPair2.Channel, counter++); var task3 = SendMessageAsync(chanPair3.Channel, counter++); await Task.WhenAll(new Task[] { task1, task2, task3 }); rcp.ReturnChannelToPool(chanPair1); rcp.ReturnChannelToPool(chanPair2); rcp.ReturnChannelToPool(chanPair3); await Task.Delay(1); // Optional Throttle } }
/// <summary> /// CookedRabbit RabbitBurrow constructor. /// </summary> /// <param name="rabbitSeasoning"></param> /// <param name="rchanp"></param> /// <param name="rconp"></param> /// <param name="logger"></param> public RabbitBurrow(RabbitSeasoning rabbitSeasoning, IRabbitChannelPool rchanp, IRabbitConnectionPool rconp, ILogger logger = null) { _seasoning = rabbitSeasoning; Transmission = new RabbitSerializeService(_seasoning, rchanp, rconp, logger); Maintenance = new RabbitMaintenanceService(_seasoning, rchanp, rconp, logger); }
/// <summary> /// CookedRabbit RabbitTopologyService constructor. Allows for the sharing of a channel pool and connection pool. /// </summary> /// <param name="rabbitSeasoning"></param> /// <param name="rchanp"></param> /// <param name="rconp"></param> /// <param name="logger"></param> public RabbitMaintenanceService(RabbitSeasoning rabbitSeasoning, IRabbitChannelPool rchanp, IRabbitConnectionPool rconp, ILogger logger = null) : base(rabbitSeasoning, rchanp, rconp, logger) { Guard.AgainstNull(rabbitSeasoning, nameof(rabbitSeasoning)); Guard.AgainstNull(rchanp, nameof(rchanp)); Guard.AgainstNull(rconp, nameof(rconp)); _logger = logger; _seasoning = rabbitSeasoning; rchanp.SetConnectionPoolAsync(rabbitSeasoning, rconp).GetAwaiter().GetResult(); RabbitChannelPool = rchanp; if (_seasoning.MaintenanceSettings.EnablePingPong) { PingPong = PingPongAsync($"{_seasoning.MaintenanceSettings.PingPongQueueName}", _cancellationTokenSource.Token); } if (_seasoning.MaintenanceSettings.ApiSettings.RabbitApiAccessEnabled) { var credentials = new NetworkCredential( _seasoning.MaintenanceSettings.ApiSettings.RabbitApiUserName, _seasoning.MaintenanceSettings.ApiSettings.RabbitApiUserPassword); _httpClient = GetOrCreateHttpClient(credentials, TimeSpan.FromSeconds(_seasoning.MaintenanceSettings.ApiSettings.RabbitApiTimeout)); } }
/// <summary> /// CookedRabbit RabbitTopologyService constructor. Allows for the sharing of a channel pool and connection pool. /// </summary> /// <param name="rabbitSeasoning"></param> /// <param name="rchanp"></param> /// <param name="rconp"></param> /// <param name="logger"></param> public RabbitTopologyService(RabbitSeasoning rabbitSeasoning, IRabbitChannelPool rchanp, IRabbitConnectionPool rconp, ILogger logger = null) { _logger = logger; _seasoning = rabbitSeasoning; rchanp.SetConnectionPoolAsync(rabbitSeasoning, rconp).GetAwaiter().GetResult(); _rcp = rchanp; }
/// <summary> /// CookedRabbit RabbitTopologyService constructor. Allows for the sharing of a channel pool. If channel is not initialized, it will automatically initialize in here. /// </summary> /// <param name="rabbitSeasoning"></param> /// <param name="rcp"></param> /// <param name="logger"></param> public RabbitTopologyService(RabbitSeasoning rabbitSeasoning, IRabbitChannelPool rcp, ILogger logger = null) { _logger = logger; _seasoning = rabbitSeasoning; _rcp = rcp; if (!_rcp.IsInitialized) { _rcp.Initialize(rabbitSeasoning).GetAwaiter().GetResult(); } }
/// <summary> /// CookedRabbit RabbitSerializeService constructor. Allows for the sharing of a channel pool and connection pool. /// </summary> /// <param name="rabbitSeasoning"></param> /// <param name="rchanp"></param> /// <param name="rconp"></param> /// <param name="logger"></param> public RabbitSerializeService(RabbitSeasoning rabbitSeasoning, IRabbitChannelPool rchanp, IRabbitConnectionPool rconp, ILogger logger = null) : base(rabbitSeasoning, rchanp, rconp, logger) { Guard.AgainstNull(rabbitSeasoning, nameof(rabbitSeasoning)); Guard.AgainstNull(rchanp, nameof(rchanp)); Guard.AgainstNull(rconp, nameof(rconp)); _logger = logger; _seasoning = rabbitSeasoning; rchanp.SetConnectionPoolAsync(rabbitSeasoning, rconp).GetAwaiter().GetResult(); _rcp = rchanp; }
/// <summary> /// CookedRabbit RabbitSerializeService constructor. Allows for the sharing of a channel pool. If channel pool is not initialized, it will automatically initialize in here. /// </summary> /// <param name="rabbitSeasoning"></param> /// <param name="rcp"></param> /// <param name="logger"></param> public RabbitSerializeService(RabbitSeasoning rabbitSeasoning, IRabbitChannelPool rcp, ILogger logger = null) : base(rabbitSeasoning, rcp, logger) { Guard.AgainstNull(rabbitSeasoning, nameof(rabbitSeasoning)); Guard.AgainstNull(rcp, nameof(rcp)); _logger = logger; _seasoning = rabbitSeasoning; _rcp = rcp; if (!_rcp.IsInitialized) { _rcp.Initialize(rabbitSeasoning).GetAwaiter().GetResult(); } }
/// <summary> /// CookedRabbit RabbitTopologyService constructor. Allows for the sharing of a channel pool. If channel pool is not initialized, it will automatically initialize in here. /// </summary> /// <param name="rabbitSeasoning"></param> /// <param name="rcp"></param> /// <param name="logger"></param> public RabbitTopologyService(RabbitSeasoning rabbitSeasoning, IRabbitChannelPool rcp, ILogger logger = null) { Guard.AgainstNull(rabbitSeasoning, nameof(rabbitSeasoning)); Guard.AgainstNull(rcp, nameof(rcp)); _logger = logger; _seasoning = rabbitSeasoning; RabbitChannelPool = rcp; if (!RabbitChannelPool.IsInitialized) { RabbitChannelPool.Initialize(rabbitSeasoning).GetAwaiter().GetResult(); } }
public static async Task PoolChannel_ReceiveMessagesForeverAsync(IRabbitChannelPool rcp) { ResetThreadName(Thread.CurrentThread, "PoolChannel ReceiveMessagesForever Thread"); while (true) { var chanPair1 = await rcp.GetPooledChannelPairAsync(); if (chanPair1.Channel.MessageCount(queueName) > 0) { var chanPair2 = await rcp.GetPooledChannelPairAsync(); var chanPair3 = await rcp.GetPooledChannelPairAsync(); var chanPair4 = await rcp.GetPooledChannelPairAsync(); var chanPair5 = await rcp.GetPooledChannelPairAsync(); var chanPair6 = await rcp.GetPooledChannelPairAsync(); var task1 = ReceiveMessageAsync(chanPair1.Channel); var task2 = ReceiveMessageAsync(chanPair2.Channel); var task3 = ReceiveMessageAsync(chanPair3.Channel); var task4 = ReceiveMessageAsync(chanPair4.Channel); var task5 = ReceiveMessageAsync(chanPair5.Channel); var task6 = ReceiveMessageAsync(chanPair6.Channel); await Task.WhenAll(new Task[] { task1, task2, task3, task4, task5, task6 }); rcp.ReturnChannelToPool(chanPair1); rcp.ReturnChannelToPool(chanPair2); rcp.ReturnChannelToPool(chanPair3); rcp.ReturnChannelToPool(chanPair4); rcp.ReturnChannelToPool(chanPair5); rcp.ReturnChannelToPool(chanPair6); await Task.Delay(1); // Optional Throttle } } }