JMS第一個成功例子


配置 activeMQ服務器

下載 activeMQ 地址:http://www.apache.org/dyn/closer.cgi/activemq/apache-activemq/5.2.0/apache-activemq-5.2.0-bin.tar.gz

1 解壓縮後 放到了e盤

2 使用cmd 鍵入E:\apache-activemq-5.2.0\bin\activemq.bat 啓動服務器 OK 這是activeMQ開始服務了 下面我們要寫JMS程序

JMS程序編寫:

1 生產者

package jms;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;

/**
 *
 *
 * @author Shal

 * @date:Jun 11, 2009 11:56:42 AM
 * @version :
 */

public class JMSProducer {

    /**
     * @param args
     * @throws JMSException
     */
    public static void main(String[] args) throws JMSException {
        // TODO Auto-generated method stub
        //activeMQ的默認服務端口是61616 我這裏在conf文件夾下的配置文件中改了端口
        ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.102.24:61618");
        Connection conn = factory.createConnection();
        conn.start();
        Queue queue = new ActiveMQQueue("q");
        Topic topic = new ActiveMQTopic("t");
        final Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Message msg = session.createTextMessage("Hello");
        //設置消費者的回覆目標
        msg.setJMSReplyTo(topic);
        MessageProducer producer = session.createProducer(queue);
        for(int i=0;i<10;i++)
        {
            producer.send(session.createTextMessage("msg "+i));
        }
        System.out.println("send over");

        //當消費者接受到消息後回覆時 此時這裏的生產者又充當了消費者的角色
        MessageConsumer consumer2 = session.createConsumer(topic);
        consumer2.setMessageListener(new MessageListener(){
            @Override
            public void onMessage(Message msg1) {
                // TODO Auto-generated method stub
                try {
                    System.out.println("2 < <"+((TextMessage)msg1).getText());
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }
}

2 消費者

package jms;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.Topic;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;

/**
 *
 *
 * @author Shal

 * @date:Jun 11, 2009 8:57:56 AM
 * @version :
 */

public class Consumer {

    /**
     * @param args
     * @throws JMSException
     */
    public static void main(String[] args) throws JMSException {
        ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.102.24:61618");
        Connection conn = factory.createConnection();
        conn.start();
        Queue queue = new ActiveMQQueue("q");
        final Topic top = new ActiveMQTopic("t");
        final Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
        MessageConsumer consumer = session.createConsumer(queue);
        final MessageProducer p = session.createProducer(top);
        consumer.setMessageListener(new MessageListener(){
            @Override
            public void onMessage(Message msg1) {
                try {
                    System.out.println("1 < <"+msg1);
                    MessageProducer p = session.createProducer(top);

                    Message msg = session.createTextMessage("haha");
                    //給回覆消息設置目標 這裏的目標就是Producer裏設置的
                    msg.setJMSDestination(msg1.getJMSReplyTo());
                    p.send(msg);
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
    }

}

--------------------------------------------------------------------------------兩個類運行(不分先後)-------------------------------

producer的控制檯中輸出

send over
2 < 
原創請看: http://www.gbsou.com/2009/08/11/158.html http://www.cnblogs.com/wpcnblog/archive/2011/07/03/2096994.html 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章