2016-10-25 2 views
1

Я пытаюсь получить доступ к статистике ActiveMQ INT C# принимая этот пример:доступ к ActiveMQ статистики плагин в C# .NET

http://activemq.apache.org/statisticsplugin.html

Y перепробовал много способов, но мой получил MapMessage является недействительным или бросить исключение, как " не может конвертировать AMQMessage в MapMessage»

это мой класс:

public class Statistics 
{ 
    private readonly IConnectionFactory connectionFactory; 
    private readonly IConnection connection; 
    private readonly ISession session; 

    public Statistics(string brokerUri) 
    { 
     this.connectionFactory = new ConnectionFactory(brokerUri); 
     this.connection = connectionFactory.CreateConnection(); 
     this.connection.Start(); 
     this.session = connection.CreateSession(); 
    } 

    public void GetStats() 
    { 
     // Crear consumidor 


     try 
     { 
      // Creo una cola y consumidor 
      IDestination queueReplyTo = session.CreateTemporaryQueue(); 
      IMessageConsumer consumer = session.CreateConsumer(queueReplyTo); 


      // Crear cola y productor 
      ActiveMQQueue newQueue = new ActiveMQQueue("ActiveMQ.Statistics.Destination.TEST1"); 
      IMessageProducer producer = session.CreateProducer(null); 

      // Crear cola monitorizada 
      string listeningQueue = "TEST1"; 
      ActiveMQQueue query = new ActiveMQQueue(listeningQueue); 

      // Mandar mensaje vacío y replicar 
      IMessage msg = session.CreateMessage(); 
      producer.Send(newQueue, msg); 
      msg.NMSReplyTo = queueReplyTo; 
      producer.Send(query, msg); 

      // Recibir 
      IMapMessage reply = (IMapMessage)consumer.ReceiveNoWait(); 


      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; 
     } 
    } 


} 

Где моя erroris моя ошибка? Заранее спасибо

ответ

1

вы можете попробовать это:

public class Statistics 
{ 
    private readonly IConnectionFactory connectionFactory; 
    private readonly IConnection connection; 
    private readonly ISession session; 

    public Statistics(string brokerUri) 
    { 
     this.connectionFactory = new ConnectionFactory(brokerUri); 
     this.connection = connectionFactory.CreateConnection(); 
     this.connection.Start(); 
     this.session = connection.CreateSession(); 
    } 

    public void GetStats() 
    { 
     // Crear consumidor 


     try 
     { 
      // Creo una cola y consumidor 
      IDestination queueReplyTo = session.CreateTemporaryQueue(); 
      IMessageConsumer consumer = session.CreateConsumer(queueReplyTo); 

      // Crear cola monitorizada 
      string listeningQueue = "TEST1"; 
      ActiveMQQueue testQueue = session.GetQueue(listeningQueue); 


      // Crear cola y productor 
      ActiveMQQueue query = session.GetQueue("ActiveMQ.Statistics.Destination.TEST1"); 
      IMessageProducer producer = session.CreateProducer(null); 

      // Mandar mensaje vacío y replicar 
      IMessage msg = session.CreateMessage(); 
      producer.Send(testQueue, msg); 
      msg.NMSReplyTo = queueReplyTo; 
      producer.Send(query, msg); 

      // Recibir 
      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; 
     } 
    } 


} 
+0

Я думаю, что сообщения в «queueReplyTo» автоматически отосланы, когда сообщение отослано к другим объявило очередь. Я не знаю, как работает «статистика», и я не нахожу информацию о том, как ее использовать в .NET. – Sem

+0

. Мне кажется, вам нужно внимательно прочитать http://activemq.apache.org/statisticsplugin.html, чтобы понять концепцию. Я обновил свой ответ с помощью кода C# –

+0

«CreateQueue» не находится в ISession API – Sem