private void OpenAndWaitConsumer(ISession session, IDestination destination, NMSConnectionMonitor connectionMonitor, MessageListener listener, CancellationToken ct) { using (IMessageConsumer consumer = CreateConsumer(session, destination)) { Trace.TraceInformation("Created consumer to {0}", destination); consumer.Listener += listener; connectionMonitor.AddMessageConsumer(consumer); ct.WaitHandle.WaitOne(); } }
private void GetDarwinData(IConnection connection, CancellationToken ct, NMSConnectionMonitor connectionMonitor) { string darwinQueueName = ConfigurationManager.AppSettings["DarwinQueueName"]; if (!string.IsNullOrEmpty(darwinQueueName)) { using (ISession session = connection.CreateSession()) { var queue = session.GetQueue(darwinQueueName); OpenAndWaitConsumer(session, queue, connectionMonitor, this.darwinConsumer_Listener, ct); } } }
private void Subscribe() { using (IConnection connection = this.GetConnection()) { connection.AcknowledgementMode = AcknowledgementMode.AutoAcknowledge; string clientId = ConfigurationManager.AppSettings["ActiveMQDurableClientId"]; if (!string.IsNullOrEmpty(clientId)) { connection.ClientId = clientId; } using (var connectionMonitor = new NMSConnectionMonitor(connection, _cancellationTokenSource, TimeSpan.FromMinutes(3))) { connection.Start(); Task dataFeedTask = Task.Factory.StartNew(() => GetDarwinData(connection, _cancellationTokenSource.Token, connectionMonitor), _cancellationTokenSource.Token); try { dataFeedTask.Wait(_cancellationTokenSource.Token); if (!connectionMonitor.QuitOk) { Trace.TraceError("Connection Monitor did not quit OK. Retrying Connection"); //TraceHelper.FlushLog(); throw new RetryException(); } _cancellationTokenSource.Cancel(); Trace.TraceInformation("Closing connection to: {0}", connection); } catch (OperationCanceledException) { Trace.TraceError("Connection Monitor cancelled"); //TraceHelper.FlushLog(); } } } }