38、ActiveMQ JMSDEMO1 一对一点对点发布消息

//ActiveMQ JMS 点对点 一对一发送接收消息

/**

测试需要启动activemq ,开发需要加入activemq的jar包 activemq-all-5.13.0.jar

* //1、创建ConnectionFactory
cf = new ActiveMQConnectionFactory(Commons.USERNAME, Commons.PASSWORD, Commons.BROKERURL);
//2、获得连接
conn = cf.createConnection();
//3、开始连接
conn.start();
//4、获得Session会话线程 参数1:是否启动事物,参数2:确认方式,一般Session.AUTO_ACKNOWLEDGE比较常用,
//另外的值日后用到再查询,目前就只做demo理解
//AUTO_ACKNOWLEDGE = 1    自动确认
//CLIENT_ACKNOWLEDGE = 2    客户端手动确认   
//DUPS_OK_ACKNOWLEDGE = 3    自动批量确认
//SESSION_TRANSACTED = 0    事务提交并确认
session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);
//5、创建队列
destination = session.createQueue(Commons.QUEUENAME);
//6、获得生产者
producer = session.createProducer(destination);
consumer = session.createConsumer(destination);


7、提供者需要发送消息,通过producer.send(message);发送
8、消费者需要通过监听器获取消息 监听器继承MessageListener类 消费者设置监听器自动接收消息consumer.setMessageListener(new XXXListener());


* @param args
* @throws JMSException

*/



测试类:

package com.jms.test;

import javax.jms.JMSException;

public class Test {
	//ActiveMQ JMS 点对点 一对一发送接收消息
	/**
	 * //1、创建ConnectionFactory
		cf = new ActiveMQConnectionFactory(Commons.USERNAME, Commons.PASSWORD, Commons.BROKERURL);
		//2、获得连接
		conn = cf.createConnection();
		//3、开始连接
		conn.start();
		//4、获得Session会话线程 参数1:是否启动事物,参数2:确认方式,一般Session.AUTO_ACKNOWLEDGE比较常用,
		//另外的值日后用到再查询,目前就只做demo理解
		//AUTO_ACKNOWLEDGE = 1    自动确认
		//CLIENT_ACKNOWLEDGE = 2    客户端手动确认   
		//DUPS_OK_ACKNOWLEDGE = 3    自动批量确认
		//SESSION_TRANSACTED = 0    事务提交并确认
		session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);
		//5、创建队列
		destination = session.createQueue(Commons.QUEUENAME);
		//6、获得生产者
		producer = session.createProducer(destination);
		consumer = session.createConsumer(destination);
		
		
		7、提供者需要发送消息,通过producer.send(message);发送
		8、消费者需要通过监听器获取消息 监听器继承MessageListener类 消费者设置监听器自动接收消息consumer.setMessageListener(new XXXListener());
		
		
	 * @param args
	 * @throws JMSException
	 */
	
	public static void main(String[] args) throws JMSException {
		//提供者发送消息
		JMSProducer.produceMessage();
		//消费者接收消息
		JMSConsumer.resumeMessage();
	}
}

JMSProducer提供者:

package com.jms.test;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnectionFactory;

public class JMSProducer {
	
	
	public static void produceMessage() throws JMSException {
		ConnectionFactory cf;//jmx连接工厂
		Connection conn;//jms连接
		Session session;//会话线程
		Destination destination;//发送/接收目标
		MessageProducer producer;//生产者
		
		//1、创建ConnectionFactory
		cf = new ActiveMQConnectionFactory(Commons.USERNAME, Commons.PASSWORD, Commons.BROKERURL);
		//2、获得连接
		conn = cf.createConnection();
		//3、开始连接
		conn.start();
		//4、获得Session会话线程 参数1:是否启动事物,参数2:确认方式,一般Session.AUTO_ACKNOWLEDGE比较常用,
		//另外的值日后用到再查询,目前就只做demo理解
		//AUTO_ACKNOWLEDGE = 1    自动确认
		//CLIENT_ACKNOWLEDGE = 2    客户端手动确认   
		//DUPS_OK_ACKNOWLEDGE = 3    自动批量确认
		//SESSION_TRANSACTED = 0    事务提交并确认
		session = conn.createSession(true, Session.AUTO_ACKNOWLEDGE);
		//5、创建队列
		destination = session.createQueue(Commons.QUEUENAME);
		//6、获得生产者
		producer = session.createProducer(destination);
		
		//发送消息
		for (int i = 0; i < 5; i++) {
			System.out.println("Now producing "+i+" message ");
			Message message = session.createTextMessage(" The message is "+(i+1));
			producer.send(message);
		}
		//7、提交实物
		session.commit();
		//关闭资源
		producer.close();
		session.close();
		conn.close();
	}
}

JMSConsumer类:

package com.jms.test;

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

import org.apache.activemq.ActiveMQConnectionFactory;

public class JMSConsumer {
	public static void resumeMessage()  {
		ConnectionFactory cf;// jmx连接工厂
		Connection conn = null;// jms连接
		Session session = null;// 会话线程
		Destination destination;// 发送/接收目标
		MessageConsumer consumer = null;// 消费者
		try {

			cf = new ActiveMQConnectionFactory(Commons.USERNAME, Commons.PASSWORD, Commons.BROKERURL);
			conn = cf.createConnection();
			conn.start();
			session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
			destination = session.createQueue(Commons.QUEUENAME);			
			consumer = session.createConsumer(destination);
			consumer.setMessageListener(new ConsumeListener());
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally {
			try {
				//消费者不能关闭连接,如果关闭连接,则接受不到消息
				System.out.println("关闭连接");
				//conn.close();
				
			} catch (Exception e2) {
				// TODO: handle exception
				e2.printStackTrace();
			}
			
		}
		
		
	}

}

//JMS监听器,需要集成Listener
class ConsumeListener implements MessageListener {

	@Override
	public void onMessage(Message message) {
		// TODO Auto-generated method stub
		try {
			TextMessage text = (TextMessage) message;
			System.out.println(text.getText());
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}

	}

}


Commons:

package com.jms.test;

import org.apache.activemq.ActiveMQConnection;

public class Commons {
	public static String USERNAME = ActiveMQConnection.DEFAULT_USER;//默认连接JMS用户名
	public static String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;//默认连接JMS密码
	public static String BROKERURL = ActiveMQConnection.DEFAULT_BROKER_URL;//默认连接JMSURL
	public static String QUEUENAME = "TESTQUEUE";
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值