org.sample.jms.SampleQueueSender.java Source code

Java tutorial

Introduction

Here is the source code for org.sample.jms.SampleQueueSender.java

Source

/*
*  Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
*  WSO2 Inc. 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.sample.jms;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.PropertyConfigurator;

import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.util.Properties;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class SampleQueueSender {

    public static final String QPID_ICF = "org.wso2.andes.jndi.PropertiesFileInitialContextFactory";
    private static final String CF_NAME_PREFIX = "connectionfactory.";
    private static final String QUEUE_NAME_PREFIX = "queue.";
    private static final String CF_NAME = "qpidConnectionfactory";
    private static final long RECORD_COUNT = 2000;
    private static final Log log = LogFactory.getLog(SampleQueueSender.class);
    private static String CARBON_CLIENT_ID = "carbon";
    private static String CARBON_VIRTUAL_HOST_NAME = "carbon";
    private static String CARBON_DEFAULT_HOSTNAME = "10.100.4.165";
    private static String CARBON_DEFAULT_PORT = "5672";
    String userName = "admin";
    String password = "admin";
    String queueName = "testQueue";
    long messageCount = 0;
    private QueueConnection queueConnection;
    private QueueSession queueSession;

    public void sendMessages() throws NamingException, JMSException {

        PropertyConfigurator.configure("log4j.properties");
        Properties properties = new Properties();
        properties.put(Context.INITIAL_CONTEXT_FACTORY, QPID_ICF);
        properties.put(CF_NAME_PREFIX + CF_NAME, getTCPConnectionURL(userName, password));
        properties.put(QUEUE_NAME_PREFIX + queueName, queueName);
        InitialContext ctx = new InitialContext(properties);
        // Lookup connection factory
        QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.lookup(CF_NAME);
        queueConnection = connFactory.createQueueConnection();
        queueConnection.start();
        queueSession = queueConnection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
        Queue queue = (Queue) ctx.lookup(queueName);
        QueueSender queueSender = queueSession.createSender(queue);
        TextMessage textMessage;

        for (long i = 0; i < RECORD_COUNT; i++) {
            // create the message to send
            textMessage = queueSession.createTextMessage("Test Message Content" + messageCount);
            // Send message
            queueSender.send(textMessage);
            messageCount++;
        }
        queueSender.close();
        queueSession.close();
        queueConnection.close();
    }

    private String getTCPConnectionURL(String username, String password) {
        // amqp://{username}:{password}@carbon/carbon?brokerlist='tcp://{hostname}:{port}'
        return new StringBuffer().append("amqp://").append(username).append(":").append(password).append("@")
                .append(CARBON_CLIENT_ID).append("/").append(CARBON_VIRTUAL_HOST_NAME).append("?brokerlist='tcp://")
                .append(CARBON_DEFAULT_HOSTNAME).append(":").append(CARBON_DEFAULT_PORT).append("'").toString();
    }

    /*
    *This method contais runnable thread which is used to calculate message per second.
     */
    public void calculate() {

        Runnable messagePerSecond = new Runnable() {
            public void run() {
                log.error("Messages per second " + messageCount);
                messageCount = 0;
            }
        };

        ScheduledExecutorService executor = Executors.newScheduledThreadPool(0);
        executor.scheduleAtFixedRate(messagePerSecond, 1, 1, TimeUnit.SECONDS);
    }
}