//ActiveMQ JMS 点对点 一对一发送接收消息
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
JMSProducer提供者:
JMSConsumer类:
/**
测试需要启动activemq ,开发需要加入activemq的jar包 activemq-all-5.13.0.jar
* //1、创建ConnectionFactorycf = 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";
}