[java] 基于ActiveMQ 传输消息

1.下载ActiveMQ

去官方网站下载:http://activemq.apache.org/

2.运行ActiveMQ

解压缩apache-activemq-5.9.0-bin.zip,然后双击apache-activemq-5.9.0\bin\win32\activemq.bat运行ActiveMQ程序。

启动ActiveMQ以后,登陆:http://localhost:8161/admin/,创建一个Queue,命名为TQueue。

3.创建项目

package com.wa.xwolf.sblog.jms;

import java.util.Scanner;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

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

/**
 * 消息发送
 * @author xwolf
 *
 */
public class Sender {
    
    private static ConnectionFactory connectionFactory ;
    
    private static Connection connection;
    
    private static Session session ;
    
    private static String  BROKER_URL="tcp://localhost:61616";
    // 消息推送目的地
    private static Destination destination;
    
    //消息提供者
    private static MessageProducer messageProducer;
    
     public static void sendMessage(Session session, MessageProducer producer)
                throws Exception {
        for(int i=0;i<2;i++){
            //读取控制到的内容并发送 
             Scanner scanner = new Scanner(System.in);
             System.out.println("请输入内容:");
                TextMessage message = session
                        .createTextMessage("ActiveMQ发送的消息:" + scanner.nextLine() );
                // 发送消息到目的地方
                System.out.println("发送消息:" + "ActiveMQ发送的消息" + scanner.nextLine());
                producer.send(message);
        }
            
        
        }
    
    
    public static void main(String[] args) throws Exception {
        //初始化 JMS 连接工厂 
        connectionFactory= new ActiveMQConnectionFactory
                (ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,BROKER_URL);
        //从连接工厂中获取链接
        connection=connectionFactory.createConnection();
        //启动 
        connection.start(); 
        // 创建session
        session= connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        // 从配置的Queue中获取消息目的地
        destination=session.createQueue("TQueue");
        
        //获取消息的发送者 
        messageProducer=session.createProducer(destination);
        
        //消息发送模式   是否持久化 
        messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        //发送消息
        sendMessage(session, messageProducer);
        
        //提交 
        session.commit();
        
    }

}
package com.wa.xwolf.sblog.jms;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;

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

/**
 * 消息接收
 * @author xwolf
 *
 */
public class Receiver {
    
private static ConnectionFactory connectionFactory ;
    
    private static Connection connection;
    
    private static Session session ;
    
    private static String  BROKER_URL="tcp://localhost:61616";
    // 消息推送目的地
    private static Destination destination;
    
    //消息消费者   (接收者)
    private static MessageConsumer messageConsumer;
    
    
    public static void main(String[] args) throws Exception{
        
        //初始化 JMS 连接工厂 
                connectionFactory= new ActiveMQConnectionFactory
                        (ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,BROKER_URL);
                //从连接工厂中获取链接
                connection=connectionFactory.createConnection();
                //启动 
                connection.start();
                // 创建session
                session= connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
                // 从配置的Queue中获取消息目的地
                destination=session.createQueue("TQueue");
                
                messageConsumer= session.createConsumer(destination);
                
                while(true){
                    // 每隔10s接收接收
                    TextMessage message = (TextMessage) messageConsumer.receive(10000);
                    if(message!=null){
                        
                        System.out.println("ActiveMQ收到的消息:"+message.getText());
                    }
                }
                        
        
    }

}

控制台看到的统计信息:

P2P点对点消息模型:

发布/订阅模型:

posted @ 2015-07-25 21:15  snow__wolf  阅读(225)  评论(0)    收藏  举报