消息签收
在创建会话时,如果使用Session.CLIENT_ACKNOWLEDGE手动签收的方式,在接收到消息之后,必须手动确认签收,消息才会出列。
消息发送者代码:
package com.wedu.mq;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Sender {
public static void main(String[] args) throws Exception {
//创建连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
//创建连接
Connection connection = factory.createConnection();
//打开连接
connection.start();
//创建非事务,手动签收会话
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
//创建队列
Queue queue = session.createQueue("Message signing");
//创建消息的生产者
MessageProducer producer = session.createProducer(queue);
for(int i = 0; i < 10; i++) {
TextMessage message = session.createTextMessage("hello,Message signing……");
producer.send(message);
}
producer.close();
session.close();
connection.close();
}
}
消息接收者代码:
package com.wedu.mq;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageConsumer;
import javax.jms.Queue;
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 factory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
//创建连接
Connection connection = factory.createConnection();
//打开连接
connection.start();
//创建非事务,手动签收会话
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
//创建队列
Queue queue = session.createQueue("Message signing");
//创建消息的消费者
MessageConsumer consumer = session.createConsumer(queue);
for(int i = 0; i < 10; i++) {
//接收消息
TextMessage message = (TextMessage) consumer.receive();
System.out.println("receive data:" + message.getText());
if(i == 3) {
message.acknowledge();//消息签收
}
}
consumer.close();
session.close();
connection.close();
}
}
本地事务
在创建会话时,如果开启事务,发送和接收必须提交后才会入队和出队。
消息发送者代码:
package com.wedu.mq;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Sender {
public static void main(String[] args) {
Connection connection = null;
Session session = null;
MessageProducer producer = null;
try {
//创建连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
//创建连接
connection = factory.createConnection();
//打开连接
connection.start();
//创建事务,手动签收会话
session = connection.createSession(true, Session.CLIENT_ACKNOWLEDGE);
//创建队列
Queue queue = session.createQueue("Message transaction");
//创建消息的生产者
producer = session.createProducer(queue);
for(int i = 0; i < 10; i++) {
producer.send(session.createTextMessage("hello,Message transaction……"));
}
session.commit();
} catch (JMSException e) {
try {
session.rollback();
} catch (JMSException e1) {
e1.printStackTrace();
}
} finally {
try {
if(producer != null) {
producer.close();
}
if(session != null) {
session.close();
}
if(connection != null) {
connection.close();
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
消息接收者代码:
package com.wedu.mq;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Receiver {
public static void main(String[] args) {
Connection connection = null;
Session session = null;
MessageConsumer consumer = null;
try {
//创建连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");
//创建连接
connection = factory.createConnection();
//打开连接
connection.start();
//创建事务,手动签收会话
session = connection.createSession(true, Session.CLIENT_ACKNOWLEDGE);
//创建队列
Queue queue = session.createQueue("Message transaction");
//创建消息的消费者
consumer = session.createConsumer(queue);
for(int i = 0; i < 10; i++) {
TextMessage message = (TextMessage) consumer.receive();//接收消息
System.out.println("receive data:" + message.getText());
}
session.commit();
} catch (JMSException e) {
try {
session.rollback();
} catch (JMSException e1) {
e1.printStackTrace();
}
} finally {
try {
if(consumer != null) {
consumer.close();
}
if(session != null) {
session.close();
}
if(connection != null) {
connection.close();
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}