|  | @ -9,6 +9,7 @@ import org.springframework.util.Assert;
 | 
	
		
			
				|  |  | import org.springframework.web.client.RestTemplate;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import javax.jms.*;
 | 
	
		
			
				|  |  | import javax.jms.IllegalStateException;
 | 
	
		
			
				|  |  | import java.util.Set;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | /**
 | 
	
	
		
			
				|  | @ -21,36 +22,59 @@ public class ConsumerRunner implements Runnable, ExceptionListener {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private final String topic;
 | 
	
		
			
				|  |  |     private Set<String> pushUrl;
 | 
	
		
			
				|  |  |     private TopicConnection topicConnection;
 | 
	
		
			
				|  |  |     private QueueConnection connection;
 | 
	
		
			
				|  |  |     private Session session;
 | 
	
		
			
				|  |  |     private MessageConsumer consumer;
 | 
	
		
			
				|  |  |     private RestTemplate restTemplate;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public ConsumerRunner(String topic, Set<String> pushUrl) throws Exception {
 | 
	
		
			
				|  |  |     public ConsumerRunner(String topic, Set<String> pushUrl) {
 | 
	
		
			
				|  |  |         Assert.notNull(topic, "Topic cannot be null");
 | 
	
		
			
				|  |  |         this.topic = topic;
 | 
	
		
			
				|  |  |         this.pushUrl = pushUrl;
 | 
	
		
			
				|  |  |         init();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private void init() throws Exception {
 | 
	
		
			
				|  |  |     private void init() {
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             ActiveMQConnectionFactory connectionFactory = SpringContext.getService(ActiveMQConnectionFactory.class);
 | 
	
		
			
				|  |  |             // Create a Connection
 | 
	
		
			
				|  |  |             connection = connectionFactory.createQueueConnection();
 | 
	
		
			
				|  |  |             connection.start();
 | 
	
		
			
				|  |  |             connection.setExceptionListener(this);
 | 
	
		
			
				|  |  |             // Create a Session
 | 
	
		
			
				|  |  |             session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 | 
	
		
			
				|  |  |             // Create the destination (Topic or Queue)
 | 
	
		
			
				|  |  |             Destination destination = session.createQueue(topic);
 | 
	
		
			
				|  |  |             // Create a MessageConsumer from the Session to the Topic or Queue
 | 
	
		
			
				|  |  |             consumer = session.createConsumer(destination);
 | 
	
		
			
				|  |  |             restTemplate = new RestTemplate();
 | 
	
		
			
				|  |  |         } catch (JMSException e) {
 | 
	
		
			
				|  |  |             LOGGER.error("Failed to init ConsumerRunner", e);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private void recover() throws JMSException {
 | 
	
		
			
				|  |  |         ActiveMQConnectionFactory connectionFactory = SpringContext.getService(ActiveMQConnectionFactory.class);
 | 
	
		
			
				|  |  |         // Create a Connection
 | 
	
		
			
				|  |  |         topicConnection = connectionFactory.createTopicConnection();
 | 
	
		
			
				|  |  |         topicConnection.start();
 | 
	
		
			
				|  |  |         topicConnection.setExceptionListener(this);
 | 
	
		
			
				|  |  |         connection = connectionFactory.createQueueConnection();
 | 
	
		
			
				|  |  |         connection.start();
 | 
	
		
			
				|  |  |         connection.setExceptionListener(this);
 | 
	
		
			
				|  |  |         // Create a Session
 | 
	
		
			
				|  |  |         Session session = topicConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 | 
	
		
			
				|  |  |         session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 | 
	
		
			
				|  |  |         // Create the destination (Topic or Queue)
 | 
	
		
			
				|  |  |         Destination destination = session.createTopic(topic);
 | 
	
		
			
				|  |  |         Destination destination = session.createQueue(topic);
 | 
	
		
			
				|  |  |         // Create a MessageConsumer from the Session to the Topic or Queue
 | 
	
		
			
				|  |  |         consumer = session.createConsumer(destination);
 | 
	
		
			
				|  |  |         restTemplate = new RestTemplate();
 | 
	
		
			
				|  |  |         if (null == restTemplate) {
 | 
	
		
			
				|  |  |             restTemplate = new RestTemplate();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Override
 | 
	
		
			
				|  |  |     public void run() {
 | 
	
		
			
				|  |  |         while (true) {
 | 
	
		
			
				|  |  |             try {
 | 
	
		
			
				|  |  |                 Thread.sleep(1000);
 | 
	
		
			
				|  |  |                 // Wait for a message
 | 
	
		
			
				|  |  |                 Message message = consumer.receive(1000);
 | 
	
		
			
				|  |  |                 if (message != null) {
 | 
	
	
		
			
				|  | @ -70,18 +94,19 @@ public class ConsumerRunner implements Runnable, ExceptionListener {
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             } catch (Exception e) {
 | 
	
		
			
				|  |  |                 LOGGER.error(e.getMessage(), e);
 | 
	
		
			
				|  |  |                 if (e instanceof IllegalStateException) {
 | 
	
		
			
				|  |  |                     try {
 | 
	
		
			
				|  |  |                         recover();
 | 
	
		
			
				|  |  |                     } catch (JMSException jme) {
 | 
	
		
			
				|  |  |                         LOGGER.error("Failed to recover ConsumerRunner", jme);
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Override
 | 
	
		
			
				|  |  |     public void onException(JMSException e) {
 | 
	
		
			
				|  |  |         LOGGER.error("Trying to recover from JMS Connection exception", e);
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             topicConnection.close();
 | 
	
		
			
				|  |  |             topicConnection.start();
 | 
	
		
			
				|  |  |         } catch (Exception ex) {
 | 
	
		
			
				|  |  |             LOGGER.error("Failed to recover JMS Connection", ex);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         LOGGER.error("ConsumerRunner onException", e);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | }
 |