39、ActiveMQ JMSDEMO1 一对多发送接收消息

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


/**
* 订阅/发布消息

* 和上一篇一对一大致相同
* 一对一提供者使用的是createQueue
* 一对多提供者发布消息用createTopic

*  另外发布/订阅模式需要 先建立订阅(消费者)
*  才会接收到发布的消息


* @param args
* @throws JMSException

*/


测试类:

package com.jms.test;

import javax.jms.JMSException;

public class Test {
	//ActiveMQ JMS  一对多发送接收消息

	/**
	 * 订阅/发布消息
	 * 
	 * 和上一篇一对一大致相同
	 * 一对一提供者使用的是createQueue
	 * 一对多提供者发布消息用createTopic
	 * 
	 *  另外发布/订阅模式需要 先建立订阅(消费者)
	 *  才会接收到发布的消息
	 * 
	 * 
	 * @param args
	 * @throws JMSException
	 */
	public static void main(String[] args) throws JMSException {
		//消费者接收消息
		JMSConsumer.resumeMessage("消费者1");
		//消费者接收消息
		JMSConsumer.resumeMessage("消费者2");

		//提供者发送消息
		JMSProducer.produceMessage();
	}
}

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.createTopic(Commons.TOPICNAME);
		//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(String consumerName)  {
		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.createTopic(Commons.TOPICNAME);			
			consumer = session.createConsumer(destination);
			consumer.setMessageListener(new ConsumeListener(consumerName));
		} 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 {

	private String consumeName = "";

	public ConsumeListener(String consumeName) {
		super();
		this.consumeName = consumeName;
	}

	@Override
	public void onMessage(Message message) {
		// TODO Auto-generated method stub
		try {

			TextMessage text = (TextMessage) message;
			System.out.println(consumeName + " reciving: " + 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 TOPICNAME = "TESTTOPIC";
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值