| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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. |
| */ |
| package org.apache.qpid.example.publisher; |
| |
| |
| import org.slf4j.LoggerFactory; |
| import org.slf4j.Logger; |
| |
| import javax.jms.DeliveryMode; |
| import javax.jms.JMSException; |
| |
| /** |
| * Class that sends heartbeat messages to allow monitoring of message consumption Sends regular (currently 20 seconds |
| * apart) heartbeat message |
| */ |
| public class MonitorMessageDispatcher |
| { |
| |
| private static final Logger _logger = LoggerFactory.getLogger(MonitorMessageDispatcher.class); |
| |
| protected static MonitorPublisher _monitorPublisher = null; |
| |
| protected static final String DEFAULT_MONITOR_PUB_NAME = "MonitorPublisher"; |
| |
| /** |
| * Easy entry point for running a message dispatcher for monitoring consumption |
| * Sends 1000 messages with no delay |
| * |
| * @param args |
| */ |
| public static void main(String[] args) |
| { |
| //Switch on logging appropriately for your app |
| try |
| { |
| int i =0; |
| while (i < 1000) |
| { |
| try |
| { |
| //endlessly publish messages to monitor queue |
| publish(); |
| |
| if (_logger.isDebugEnabled()) |
| { |
| _logger.debug("Dispatched monitor message"); |
| } |
| |
| //sleep for twenty seconds and then publish again - change if appropriate |
| //Thread.sleep(1000); |
| i++ ; |
| } |
| catch (UndeliveredMessageException a) |
| { |
| //trigger application specific failure handling here |
| _logger.error("Problem delivering monitor message"); |
| break; |
| } |
| } |
| } |
| catch (Exception e) |
| { |
| _logger.error("Error trying to dispatch AMS monitor message: " + e); |
| System.exit(1); |
| } |
| finally |
| { |
| if (getMonitorPublisher() != null) |
| { |
| getMonitorPublisher().cleanup(); |
| } |
| } |
| |
| System.exit(1); |
| } |
| |
| /** |
| * Publish heartbeat message |
| * |
| * @throws JMSException |
| * @throws UndeliveredMessageException |
| */ |
| public static void publish() throws JMSException, UndeliveredMessageException |
| { |
| //Send the message generated from the payload using the _publisher |
| // getMonitorPublisher().sendImmediateMessage |
| // (FileMessageFactory.createSimpleEventMessage(getMonitorPublisher().getSession(),"monitor:" +System.currentTimeMillis())); |
| |
| getMonitorPublisher().sendMessage |
| (getMonitorPublisher()._session, |
| FileMessageFactory.createSimpleEventMessage(getMonitorPublisher().getSession(), "monitor:" + System.currentTimeMillis()), |
| DeliveryMode.PERSISTENT, false, true); |
| |
| } |
| |
| /** Cleanup publishers */ |
| public static void cleanup() |
| { |
| if (getMonitorPublisher() != null) |
| { |
| getMonitorPublisher().cleanup(); |
| } |
| |
| if (getMonitorPublisher() != null) |
| { |
| getMonitorPublisher().cleanup(); |
| } |
| } |
| |
| //Returns a _publisher for the monitor queue |
| private static MonitorPublisher getMonitorPublisher() |
| { |
| if (_monitorPublisher != null) |
| { |
| return _monitorPublisher; |
| } |
| |
| //Create a _publisher using failover details and constant for monitor queue |
| _monitorPublisher = new MonitorPublisher(); |
| |
| _monitorPublisher.setName(MonitorMessageDispatcher.DEFAULT_MONITOR_PUB_NAME); |
| return _monitorPublisher; |
| } |
| |
| } |