/// <summary> /// 将消息发送到队列,如果失败则存储在本地 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queueName"></param> /// <param name="message"></param> private void SendMessage <T>(String queueName, T message) { if (m_RabbitMQ != null) { try { if (queueName == Constant.ESB_INVOKE_QUEUE) { m_RabbitMQ.SendToInvokeQueue(message as QueueMessage); } else { m_RabbitMQ.SendMessage <T>(queueName, message); } } catch (Exception ex) { m_LocalMQ.QueueMessage <T>(queueName, message); XTrace.WriteLine("向消息队列发送数据产生异常, 这段时间消息将被存在本地:{0}", ex.ToString()); m_RabbitMQ.Dispose(); m_RabbitMQ = null; if (m_TimerX == null) { m_TimerX = new TimerX(x => Connect(), null, 5000, 5000); XTrace.WriteLine("5秒之后将会重新连接消息队列..."); } } } else { m_LocalMQ.QueueMessage <T>(queueName, message); } }
/// <summary> /// 关闭线程进行操作 /// </summary> public void Stop() { m_Thread.Abort(); m_RabbitMQ.Dispose(); XTrace.WriteLine("线程[{0}]关闭对服务[{1}]的队列操作。", m_Thread.ManagedThreadId, m_ServiceName); }