Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        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);
                }
            }
        }
Exemplo n.º 3
0
        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();
                    }
                }
            }
        }