protected override void OnInit() { OnDispose(); _senders = new List <RedisMQConnection>(); if (Config != null) { if (Config.ClientQueues != null) { _clientQueues = Config.ClientQueues.FirstOf( c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true && c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true, c => c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName.IsNullOrWhitespace()); } _senderOptions = Config.RequestOptions?.ClientSenderOptions; _receiverOptions = Config.ResponseOptions?.ClientReceiverOptions; _receiverOptionsTimeout = TimeSpan.FromSeconds(_receiverOptions?.TimeoutInSec ?? 20); UseSingleResponseQueue = _receiverOptions?.Parameters?[ParameterKeys.SingleResponseQueue].ParseTo(true) ?? true; if (_clientQueues?.SendQueues?.Any() == true) { foreach (var queue in _clientQueues.SendQueues) { Core.Log.LibVerbose("New Producer from QueueClient"); var redisConnection = new RedisMQConnection(queue); _senders.Add(redisConnection); } } if (_clientQueues?.RecvQueue != null && !SendOnly) { _receiverConnection = new RedisMQConnection(_clientQueues.RecvQueue); if (!UseSingleResponseQueue) { _receiverConnection.Name += "-" + Core.InstanceIdString; Core.Log.InfoBasic("Using custom response queue: {0}", _receiverConnection.Name); } _receiverConnection.SubscribeAsync(new Action <RedisChannel, RedisValue>(ProcessReceivedMessage)).WaitAsync(); } } Core.Status.Attach(collection => { if (_senders != null) { for (var i = 0; i < _senders.Count; i++) { collection.Add("Sender Path: {0}".ApplyFormat(i), _senders[i].Route); } } if (_clientQueues?.RecvQueue != null) { collection.Add("Receiver Path", _clientQueues.RecvQueue.Route); } }); }
/// <summary> /// Message Queue Manager /// </summary> public QueueManager(MQPairConfig config) { Config = config ?? throw new ArgumentNullException("The configuration pair must not be null", nameof(config)); Security = Config.Security?.FirstOf( c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true && c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true, c => c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName.IsNullOrWhitespace()); _clientQueues = Config.ClientQueues?.FirstOf( c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true && c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true, c => c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName.IsNullOrWhitespace()); _serverQueues = Config.ServerQueues?.FirstOf( c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true && c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true, c => c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName.IsNullOrWhitespace()); _admin = Config.GetAdmin(); }
protected override void OnInit() { _receiver = null; if (Config != null) { if (Config.ClientQueues != null) { _clientQueues = Config.ClientQueues.FirstOf( c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true && c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true, c => c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName.IsNullOrWhitespace()); } _senderOptions = Config.RequestOptions?.ClientSenderOptions; _receiverOptions = Config.ResponseOptions?.ClientReceiverOptions; _receiverOptionsTimeout = _receiverOptions?.TimeoutInSec ?? 20; if (_receiverOptions?.Parameters?.Contains("Clone") == true) { _cloneObject = _receiverOptions.Parameters["Clone"].ParseTo(false); } if (_clientQueues != null) { if (_clientQueues.RecvQueue != null) { _receiver = MemoryQueueManager.GetQueue(_clientQueues.RecvQueue.Route, _clientQueues.RecvQueue.Name); } foreach (var sender in _clientQueues.SendQueues) { MemoryQueueManager.GetQueue(sender.Route, sender.Name); } } } Core.Status.AttachObject(this); }
public void StartListeners() { if (_tokenSource != null) { StopListeners(); } Core.Log.InfoBasic("Configuring server mode for {0} with ResponseServer = {1}", Name, ResponseServer); if (ResponseServer) { ReceiverSerializer = SerializerManager.GetByMimeType(Config.ResponseOptions?.SerializerMimeType); if (ReceiverSerializer != null && Config.ResponseOptions?.CompressorEncodingType.IsNotNullOrEmpty() == true) { ReceiverSerializer.Compressor = CompressorManager.GetByEncodingType(Config.ResponseOptions?.CompressorEncodingType); } SenderSerializer = null; Core.Log.InfoBasic("Adding queue client listener for {0}, Environment: {1}", Name, Core.EnvironmentName); _clientQueues = Config.ClientQueues?.FirstOf( c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true && c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true, c => c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName.IsNullOrWhitespace()); if (_clientQueues?.RecvQueue != null) { var queueListener = OnCreateQueueServerListener(_clientQueues.RecvQueue, ResponseServer); queueListener.ResponseReceived += QueueListener_ResponseReceived; QueueServerListeners.Add(queueListener); } else { Core.Log.Warning("There aren't any Receiver Queue for the Client Listener. Check the ClientQueues element on the queue config file."); } } else { ReceiverSerializer = SerializerManager.GetByMimeType(Config.RequestOptions?.SerializerMimeType); if (ReceiverSerializer != null && Config.RequestOptions?.CompressorEncodingType.IsNotNullOrEmpty() == true) { ReceiverSerializer.Compressor = CompressorManager.GetByEncodingType(Config.RequestOptions?.CompressorEncodingType); } SenderSerializer = SerializerManager.GetByMimeType(Config.ResponseOptions?.SerializerMimeType); if (SenderSerializer != null && Config.ResponseOptions?.CompressorEncodingType.IsNotNullOrEmpty() == true) { SenderSerializer.Compressor = CompressorManager.GetByEncodingType(Config.ResponseOptions?.CompressorEncodingType); } Core.Log.InfoBasic("Adding queue server listeners for {0}, Environment: {1}", Name, Core.EnvironmentName); _serverQueues = Config.ServerQueues?.FirstOf( c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true && c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true, c => c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName.IsNullOrWhitespace()); if (_serverQueues?.RecvQueues?.Any() == true) { _serverQueues.RecvQueues.Each(queue => { var queueListener = OnCreateQueueServerListener(queue, ResponseServer); queueListener.RequestReceived += QueueListener_RequestReceived; QueueServerListeners.Add(queueListener); }); } else { Core.Log.Warning("There aren't any Receiver Queue for the Server Listeners. Check the ServerQueues element on the queue config file."); } } if (QueueServerListeners.Count > 0) { Core.Log.InfoBasic("Starting queue server listeners for {0}", Name); _tokenSource = new CancellationTokenSource(); _listenerTasks.Clear(); foreach (var listener in QueueServerListeners) { _listenerTasks.Add(InitListener(listener)); } } else { Core.Log.Warning("There are not server listener to start."); } }
protected override void OnInit() { OnDispose(); _senders = new List <RabbitMQueue>(); _receiver = null; _receiverStopBuffered = ActionDelegate.Create(RemoveReceiverConsumer).CreateBufferedAction(60000); if (Config != null) { if (Config.ClientQueues != null) { _clientQueues = Config.ClientQueues.FirstOf( c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true && c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName?.SplitAndTrim(",").Contains(Core.EnvironmentName) == true, c => c.MachineName?.SplitAndTrim(",").Contains(Core.MachineName) == true, c => c.EnvironmentName.IsNullOrWhitespace()); } _senderOptions = Config.RequestOptions?.ClientSenderOptions; _receiverOptions = Config.ResponseOptions?.ClientReceiverOptions; _receiverOptionsTimeout = TimeSpan.FromSeconds(_receiverOptions?.TimeoutInSec ?? 20); UseSingleResponseQueue = _receiverOptions?.Parameters?[ParameterKeys.SingleResponseQueue].ParseTo(true) ?? true; if (_clientQueues != null) { if (_clientQueues.SendQueues?.Any() == true) { foreach (var queue in _clientQueues.SendQueues) { var rabbitQueue = new RabbitMQueue(queue); rabbitQueue.EnsureConnectionAsync(2000, int.MaxValue).WaitAndResults(); rabbitQueue.EnsureExchange(); _senders.Add(rabbitQueue); } } if (_clientQueues.RecvQueue != null && !SendOnly) { _receiver = new RabbitMQueue(_clientQueues.RecvQueue); } } if (_senderOptions is null) { throw new Exception("Client Sender Options is Null."); } _priority = (byte)(_senderOptions.MessagePriority == MQMessagePriority.High ? 9 : _senderOptions.MessagePriority == MQMessagePriority.Low ? 1 : 5); _expiration = (_senderOptions.MessageExpirationInSec * 1000).ToString(); _deliveryMode = (byte)(_senderOptions.Recoverable ? 2 : 1); CreateReceiverConsumerAsync().WaitAsync(); } Core.Status.Attach(collection => { if (_senders != null) { for (var i = 0; i < _senders.Count; i++) { collection.Add("Sender: {0} ".ApplyFormat(i), _senders[i].Route + " - " + _senders[i].Name); } } if (_receiver != null) { collection.Add("Receiver: {0}", _receiver.Route + " - " + _receiver.Name); } }); }