using Microsoft.Extensions.ObjectPool; using Microsoft.Extensions.Options; using RabbitMQ.Client; namespace Pole.EventBus.RabbitMQ { public class RabbitMQClient : IRabbitMQClient { readonly ConnectionFactory connectionFactory; readonly RabbitOptions options; readonly DefaultObjectPool pool; public RabbitMQClient(IOptions config) { options = config.Value; connectionFactory = new ConnectionFactory { UserName = options.UserName, Password = options.Password, VirtualHost = options.VirtualHost, AutomaticRecoveryEnabled = true }; pool = new DefaultObjectPool(new ModelPooledObjectPolicy(connectionFactory, options)); } public ModelWrapper PullModel() { var result = pool.Get(); if (result.Pool is null) result.Pool = pool; return result; } } }