2013-04-01 2 views
1

Я пытаюсь получить доступ к информации о статистике ActiveMQ http://activemq.apache.org/statisticsplugin.html в C#, как получить доступ плагин статистики ActiveMQ в .net

Это то, что я до сих пор. Я не могу получить ответ от потребителя. Я могу увеличить счет на веб-сайте монитора для очереди.

public class Statistics 
{ 
    private readonly string queueName = string.Empty; 
    private readonly string queueToMonitor = string.Empty; 
    private readonly IConnectionFactory connectionFactory; 
    private readonly IConnection connection; 
    private readonly ISession session; 
    private readonly IMessageProducer producer; 
    private readonly ActiveMQQueue queue; 


    public Statistics(string qName, string brokerUri, string queueToMon) 
    { 
     this.queueName = qName; 
     this.queueToMonitor = "ActiveMQ.Statistics.Destination." + queueToMon; 
     this.connectionFactory = new ConnectionFactory(brokerUri); 
     this.connection = connectionFactory.CreateConnection(); 
     this.connection.Start(); 
     this.session = connection.CreateSession(); 

     queue = new ActiveMQQueue(qName); 
     producer = session.CreateProducer(queue); 

    } 

    public void GetStats() 
    { 
     try 
     { 
      var statusQueue = session.CreateTemporaryQueue(); 
      var consumer = session.CreateConsumer(statusQueue); 
      ActiveMQQueue query = new ActiveMQQueue(queueToMonitor); 

      var msg = session.CreateMessage(); 
      msg.NMSReplyTo = statusQueue; 
      producer.Send(queue, msg); 

      var reply = (ActiveMQMapMessage)consumer.Receive(); 

      if (reply != null) 
      { 
       var test = reply.Content.ToString(); 
      } 
     } 
     catch (Exception e) 
     { 
      var t = e.Message + " " + e.StackTrace; 
     } 

    } 
} 
+0

Вы гарантировали, что плагин включен в вашем брокере? –

ответ

3

Высылаем сообщение в неправильную очередь. Вам необходимо отправить сообщение на адрес ActiveMQ.Statistics.Destination.QueueToMonitor. Я переписал вашу функцию GetStats(), чтобы показать, что она работает. Критическое изменение - это то место, куда производитель отправляет сообщение.

public void GetStats() 
{ 
    try 
    { 
     IDestination statusQueue = session.CreateTemporaryQueue(); 
     IMessageConsumer consumer = session.CreateConsumer(statusQueue); 
     IDestination query = session.GetQueue(queueToMonitor); 
     IMessage msg = session.CreateMessage(); 
     IMessageProducer producer = session.CreateProducer(query); 

     msg.NMSReplyTo = statusQueue; 
     producer.Send(msg); 

     IMapMessage reply = (IMapMessage) consumer.Receive(); 

     if(reply != null) 
     { 
      IPrimitiveMap statsMap = reply.Body; 

      foreach(string statKey in statsMap.Keys) 
      { 
       Console.WriteLine("{0} = {1}", statKey, statsMap[statKey]); 
      } 
     } 
    } 
    catch(Exception e) 
    { 
     var t = e.Message + " " + e.StackTrace; 
    } 
}