消息生产者
package com.zuk.activemq.demo;
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.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQMessage;
public class Sender {
public static void main(String[] args) throws Exception{
/*
* 创建ConnectionFactory工厂对象,填入用户、密码
*/
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnectionFactory.DEFAULT_USER,
ActiveMQConnectionFactory.DEFAULT_PASSWORD,
"tcp://localhost:61616");
/*
* 根据ConnectionFactory创建一个connect连接
*/
Connection connection = connectionFactory.createConnection();
connection.start();
/* 创建Session回话
*
* Boolean.FALSE 无事务操作 无session操作
* Boolean.TRUE 事务操作 session.commit();或者 session.rollback();
*
* Session.AUTO_ACKNOWLEDGE 自动确认模式
* Session.CLIENT_ACKNOWLEDGE 手工确认模式
*/
Session session = connection.createSession(Boolean.TRUE, Session.CLIENT_ACKNOWLEDGE);
/*
*通过Session创建Destination对象,指的是一个客户端用来产生消息目标和消费消息来源的对象,
*在PTP模式中,Destination是queue
*在public/descripe中是topic
* */
Destination destination = session.createQueue("hongjia.mis.mail.queue");
/*
* 通过Session创建消息的发送者MessageProducer和接受者MessageConsumer
* */
MessageProducer messageProducer = session.createProducer(destination);
/*
* 通过DeliveryMode设置消息的持久(写入数据库中)和非持久化特性
*
* NON_PERSISTENT 不写入数据库中
*
* PERSISTENT 写入数据库中
*
* */
messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
// /*
// * 设置消息的数据类型
// * TestMessage
// *
// * */
// TextMessage textMessage = session.createTextMessage();
// textMessage.setText("hello world.");
//
// /*
// * 发送消息
// * */
// messageProducer.send(textMessage);
for (int i=0; i<50;i++) {
/*
* 设置消息的数据类型
* TestMessage
*
* */
TextMessage textMessage = session.createTextMessage();
textMessage.setText("hello world "+i+" 次");
System.out.println("生产者生产消息:" + "hello world "+i+" 次");
/*
* 发送消息
* */
messageProducer.send(textMessage);
}
//事务方式提交操作
session.commit();
//关闭
if(connection!=null){
connection.close();
}
}
}
消费者
package com.zuk.activemq.demo;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Receiver {
public static void main(String[] args) throws Exception{
/*
* 创建ConnectionFactory工厂对象,填入用户、密码
*/
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnectionFactory.DEFAULT_USER,
ActiveMQConnectionFactory.DEFAULT_PASSWORD,
"tcp://localhost:61616");
/*
* 根据ConnectionFactory创建一个connect连接
*/
Connection connection = connectionFactory.createConnection();
connection.start();
/*创建Session回话
*
* Boolean.FALSE 无事务操作 无session操作
* Boolean.TRUE 事务操作 session.commit();或者 session.rollback();
*
*Session.AUTO_ACKNOWLEDGE 自动确认模式
*Session.CLIENT_ACKNOWLEDGE 手工确认模式
*/
Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
/*
*通过Session创建Destination对象,指的是一个客户端用来产生消息目标和消费消息来源的对象,
*在PTP模式中,Destination是queue
*在public/descripe中是topic
* */
Destination destination = session.createQueue("hongjia.mis.mail.queue");
/*
* 通过Session创建消息的发送者MessageProducer和接受者MessageConsumer
* */
MessageConsumer messageConsumer = session.createConsumer(destination);
System.out.println("开始消费.");
int iii=0;
while(true){
if(iii>=20){
break;
}else{
iii++;
}
TextMessage textMessage = (TextMessage) messageConsumer.receive();
if(textMessage==null){
break;
}
Thread.sleep(1000);
System.out.println("消费者:"+textMessage.getText());
//手动确认签收
textMessage.acknowledge();
session.commit();
}
//关闭
if(connection!=null){
connection.close();
}
}
}