Получение сообщения AMQ через плагин ActiveMQ Broker

#java #activemq

#java #activemq

Вопрос:

Я реализовал пользовательский плагин ActiveMQ broker, используя класс BrokerFilter. Я переопределил метод отправки, показанный ниже.

 public void send(final ProducerBrokerExchange producerExchange, final Message messageSend) throws Exception {

     logger.info("Message  : "   messageSend);
     // Returns the JMS Type of Mesage
     logger.info("Message Type  : "    messageSend.getType());

     // Lookig for method to get the message text
        ?

}
 

В первой строке журналов отображается текст сообщения в объекте, но, похоже, нет метода, доступного для получения текста сообщения.

     INFO | Message : ActiveMQTextMessage {commandId = 5, responseRequired = false, messageId = ID:192.168.10.6-63132-1613444356003-4:1:1:1:1, originalDestination = null, originalTransactionId = null, producerId = ID:192.168.10.6-63132-1613444356003-4:1:1:1, destination = topic://reporting, transactionId = null, expiration = 0, timestamp = 1613444364819, arrival = 0, brokerInTime = 0, brokerOutTime = 0, correlationId = , replyTo = null, persistent = false, type = NewAgent, priority = 0, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = null, marshalledProperties = null, dataStructure = null, redeliveryCounter = 0, size = 0, properties = null, readOnlyProperties = true, readOnlyBody = true, droppable = false, jmsXGroupFirstForConsumer = false, **text = Hello** }

    INFO | getType : New
 

Может ли кто-нибудь указать мне соответствующий класс или метод для получения / перехвата текста сообщения? Моя цель — получить текст / тело сообщения и сохранить его в redis.

Ответ №1:

Вам нужно выяснить, что это за сообщение, и использовать его, чтобы извлечь текст (или что-то еще) из сообщения. Попробуйте что-то вроде:

 public void send(final ProducerBrokerExchange producerExchange, final Message messageSend) throws Exception {

  logger.info("Message  : "   messageSend);
  // Returns the JMS Type of Mesage
  logger.info("Message Type  : "    messageSend.getType());
  logger.info("Message Class : "   messageSend.getClass().toString());
  // Lookig for method to get the message text
  
  if (messageSend instanceof ActiveMQTextMessage) {
    ActiveMQTextMessage txtMsg = (ActiveMQTextMessage)messageSend;
    Logger.info("Message Text : "   txtMsg.getText();
  }

}
 

Документы текстовых сообщений.