ActiveMQ之点对点的消息实现

Posted AnswerTheQuestion

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActiveMQ之点对点的消息实现相关的知识,希望对你有一定的参考价值。

1.创建消息生产者

package com.javaweb.activemq;

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 Dell-Pc
 *
 */
public class JMSProducer {
    private static final String USERNAME=ActiveMQConnection.DEFAULT_USER;//默认的连接用户名
    private static final String PASSWORD=ActiveMQConnection.DEFAULT_PASSWORD;//默认的连接密码
    private static final String BROKEURL=ActiveMQConnection.DEFAULT_BROKER_URL;//默认的连接地址
    private static final int SENDNUM=10;//发送条数
    public static void main(String[] args) {
        ConnectionFactory connectionFactory;//连接工厂(可以生产Connection)
        Connection connection=null;// 连接
        Session session;//用于会话、接收或者发送消息的线程
        Destination destination;//消息的目的地址
        MessageProducer messageProducer;//;消息生产者
        
        //实例化连接工厂
        connectionFactory=new ActiveMQConnectionFactory(JMSProducer.USERNAME,JMSProducer.PASSWORD, JMSProducer.BROKEURL);//JMSProducer.BROKEURL,系统静态变量,默认地址tcp://localhost:61616
                
        try {
            connection=connectionFactory.createConnection();//获取connection
            connection.start();//启动连接工厂
            session=connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);//创建Session。(第一个参数是否在发送消息中加入事物,一般开发中都要加入。)(第二个参数是发送接收消息的方式)
            destination=session.createQueue("FirstQueue");//创建消息队列
            messageProducer=session.createProducer(destination);//创建消息生产者
            sendMessage(session, messageProducer); // 发送消息
            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(connection!=null){
                try {
                    connection.close();
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        
    }
    
    /**
     * 发送消息
     * @param session
     * @param messageProducer
     * @throws Exception
     */
    public static void sendMessage(Session session,MessageProducer messageProducer)throws Exception{
        for(int i=0;i<JMSProducer.SENDNUM;i++){
            TextMessage message=session.createTextMessage("ActiveMQ 发送的消息"+i);
            System.out.println("发送消息:"+"ActiveMQ 发送的消息"+i);
            messageProducer.send(message);
        }
    }
    
}

2.创建消息消费者

package com.javaweb.activemq;

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;

/**
 * 消息消费者
 * @author Dell-Pc
 *
 */
public class JMSConsumer {
    private static final String USERNAME=ActiveMQConnection.DEFAULT_USER;//默认的连接用户名
    private static final String PASSWORD=ActiveMQConnection.DEFAULT_PASSWORD;//默认的连接密码
    private static final String BROKEURL=ActiveMQConnection.DEFAULT_BROKER_URL;//默认的连接地址
    public static void main(String[] args) {
        ConnectionFactory connectionFactory;//连接工厂(可以生产Connection)
        Connection connection=null;// 连接
        Session session;//用于会话、接收或者发送消息的线程
        Destination destination;//消息的目的地址
        
        MessageConsumer consumer;//消息消费者
        
        //实例化连接工厂
        connectionFactory=new ActiveMQConnectionFactory(JMSConsumer.USERNAME,JMSConsumer.PASSWORD, JMSConsumer.BROKEURL);
        
        try {
            connection=connectionFactory.createConnection();//获取connection
            connection.start();//启动连接工厂
            session=connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);//创建Session。(事物,消费信息就不需要加入事物了)(第二个参数是发送接收消息的方式)
            destination=session.createQueue("FirstQueue");//创建消息队列
            consumer=session.createConsumer(destination);//创建消息消费者
            while(true){
                TextMessage text=(TextMessage) consumer.receive();
                if(text!=null){
                    System.out.println("接收的消息"+text.getText());
                }
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            
        }

    }

}

 

 //在上面所述的消息消费者的消费方式很不好,所以我们常用下面这一种消费方式

1.创建监听类

package com.javaweb.activemq;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
/**
 * 消息监听
 * @author Dell-Pc
 *
 */
public class Listen implements MessageListener {

    @Override
    public void onMessage(Message message) {
        // TODO 自动生成的方法存根
        try {
            System.out.println("收到的消息"+((TextMessage)message).getText());
        } catch (JMSException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    }
    
}

2.创建消息消费者

package com.javaweb.activemq;

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;

/**
 * 消息消费者
 * @author Dell-Pc
 *
 */
public class JMSConsumer_lesten {
    private static final String USERNAME=ActiveMQConnection.DEFAULT_USER;//默认的连接用户名
    private static final String PASSWORD=ActiveMQConnection.DEFAULT_PASSWORD;//默认的连接密码
    private static final String BROKEURL=ActiveMQConnection.DEFAULT_BROKER_URL;//默认的连接地址
    public static void main(String[] args) {
        ConnectionFactory connectionFactory;//连接工厂(可以生产Connection)
        Connection connection=null;// 连接
        Session session;//用于会话、接收或者发送消息的线程
        Destination destination;//消息的目的地址
        
        MessageConsumer consumer;//消息消费者
        
        //实例化连接工厂
        connectionFactory=new ActiveMQConnectionFactory(JMSConsumer_lesten.USERNAME,JMSConsumer_lesten.PASSWORD, JMSConsumer_lesten.BROKEURL);
        
        try {
            connection=connectionFactory.createConnection();//获取connection
            connection.start();//启动连接工厂
            session=connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);//创建Session。(事物,消费信息就不需要加入事物了)(第二个参数是发送接收消息的方式)
            destination=session.createQueue("FirstQueue");//创建消息队列
            consumer=session.createConsumer(destination);//创建消息消费者
            /*与上面哪一种唯一的不同*/
            consumer.setMessageListener(new Listen());//注册消息监听
            
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            
        }

    }

}

 

以上是关于ActiveMQ之点对点的消息实现的主要内容,如果未能解决你的问题,请参考以下文章

ActiveMQ消息队列的使用及应用

ActiveMQ消息队列的使用及应用

ActiveMQ消息队列的使用及应用

activeMQ学习---------点对点发布订阅的消息代码实现

JMS-ActiveMq-点对点模式

消息队列篇—详谈ActiveMQ消息队列模式的分析及使用