package com.thinkbiganalytics.activemq; /*- * #%L * thinkbig-activemq-core * %% * Copyright (C) 2017 ThinkBig Analytics * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.jms.JmsException; import org.springframework.jms.core.JmsMessagingTemplate; import org.springframework.jms.core.MessageCreator; import org.springframework.messaging.Message; import org.springframework.stereotype.Component; import java.io.Serializable; import javax.jms.JMSException; import javax.jms.Session; import javax.jms.TextMessage; /** */ @Component public class SendJmsMessage { private static final Logger log = LoggerFactory.getLogger(SendJmsMessage.class); private static final String TEST_MESSAGE_QUEUE_NAME = "thinkbig.nifi.test-queue"; private static final String TEST_MESSAGE = "testing123"; @Autowired ObjectMapperSerializer objectMapperSerializer; @Autowired @Qualifier("jmsTemplate") private JmsMessagingTemplate jmsMessagingTemplate; private void sendObjectToQueue(String queueName, final Object obj) { sendObjectToQueue(queueName, obj, obj.getClass().getName()); } public void sendSerializedObjectToQueue(String queueName, final Serializable obj) throws JmsException { log.info("Sending ActiveMQ message [" + obj + "] to queue [" + queueName + "]"); jmsMessagingTemplate.convertAndSend(queueName, obj); } private void sendObjectToQueue(String queueName, final Object obj, final String objectClassType) throws JmsException { log.info("Sending ActiveMQ message [" + obj + "] to queue [" + queueName + "]"); MessageCreator creator = new MessageCreator() { TextMessage message = null; @Override public javax.jms.Message createMessage(Session session) throws JMSException { message = session.createTextMessage(); message.setStringProperty("jms_javatype", objectClassType); message.setText(objectMapperSerializer.serialize(obj)); return message; } }; this.jmsMessagingTemplate.getJmsTemplate().send(queueName, creator); } public boolean testJmsIsRunning() { log.info("Testing JMS connection"); try { sendObjectToQueue(TEST_MESSAGE_QUEUE_NAME, TEST_MESSAGE); log.info("sending message to the topic"); Message jmsMessage = jmsMessagingTemplate.receive(TEST_MESSAGE_QUEUE_NAME); log.info("received the JMS message back"); String payload = (String) jmsMessage.getPayload(); if (("\"" + TEST_MESSAGE + "\"").equals(payload)) { return true; } } catch (Throwable t) { log.info("Error testing JMS connection. This is most likely because it's down", t); } return false; } }