ActiveMQ HelloWorld实例

一、下载ActiveMQ
http://activemq.apache.org/download.html

二、启动ActiveMQ
运行bin目录下的activemq.bat即可,此例用到的是61616端口和8161端口

注意:
ActiveMQ对JDK版本有要求,最新版ActiveMQ 5.14.4与JDK1.6是不兼容的,此时ActiveMQ端口无法启动,本地代码亦无法运行,报错:Unsupported major.minor version 51.0。
因此要成功运行代码要么升级JDK版本,要么使用旧版本的ActiveMQ。
以下代码测试使用的是JDK1.6和ActiveMQ 5.0.0,这是第一个带有web控制台的版本(http://localhost:8161/admin/)。

三、创建Java工程
复制根目录下的activemq-all-5.0.0.jar到Java工程的根目录。
由于后续版本有直接依赖commons-logging jar包,因此还需要复制commons-logging-1.0.4.jar到根目录。
对以上两个jar包添加Build Path。

四、编写生产者

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
 

/**
 *
 * @author BaiJianyu
 *
 */

public class JMSProducer {
    private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    private static final String BROKERURL= ActiveMQConnection.DEFAULT_BROKER_URL;
   
    private static final int SENDNUM=10;
   
    public static void main(String[] args) {
        //连接工厂及实例化
        ConnectionFactory connectionFactory =new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKERURL);
        Connection connection =null;
       
        try{
            //获取连接
            connection = connectionFactory.createConnection();
           
            //启动连接
            connection.start();
           
            //创建session
            Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
           
            //创建消息队列(消息目的地)
            Destination destination = session.createQueue("HelloWorld");
           
            //创建消息生产者
            MessageProducer messageProducer = session.createProducer(destination);
           
            //发送消息
            for(int i=0;i<SENDNUM;i++){
                TextMessage message = session.createTextMessage("ActiveMQ 发送消息"+i);
                System.out.println("发送消息:Activemq 发送消息" + i);
                messageProducer.send(message);
            }
           
            //提交会话
            session.commit();
           
        }catch(Exception e){
            e.printStackTrace();
        }
        finally{
            if(connection!=null){
                try{
                    connection.close();
                }
                catch(JMSException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

生产者需要注意必须commit会话,否则消息不会提交

五、编写消费者

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;


public class JMSConsumer {
    private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    private static final String BROKERURL = ActiveMQConnection.DEFAULT_BROKER_URL;
   
    public static void main(String[] args) {
        //连接工厂及实例化
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME,PASSWORD,BROKERURL);
       
        //连接
        Connection connection = null;
       
        try{
            //获取连接
            connection = connectionFactory.createConnection();
           
            //启动连接
            connection.start();
           
            //创建Session
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
           
            //创建一个连接HelloWorld的连接队列(消息目的地)
            Destination destination  = session.createQueue("HelloWorld");
           
            //创建消费者
            MessageConsumer messageConsumer = session.createConsumer(destination);
           
            while(true){
                TextMessage textMessage = (TextMessage) messageConsumer.receive(100000);
                if(textMessage !=null){
                    System.out.println("收到的消息:"+textMessage.getText());
                }else{
                    break;
                }
            }
        }
        catch(JMSException e){
            e.printStackTrace();
        }
        finally{
           
        }
    }
}

六、运行生产者
生产者成功发送消息:

web控制台:

七、运行消费者
消费者收到消息:

web控制台:

本文参考:
于亮
http://blog.csdn.net/jiuqiyuliang/article/category/5617711
并对其中代码做了简化,添加了实际测试中遇到的问题。