发送端/生产者(带有事务):
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.MessageProducer;
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工厂对象【需填入用户名、密码、要连接的地址】
ActiveMQConnectionFactory connectionFactory =
new ActiveMQConnectionFactory("admin","1234","tcp://localhost:61616");
//第二步:通过ConnectionFactory工厂对象创建一个Connection连接,并且调用Connection
的start方法开启连接【connection默认是关闭的】
Connection connection = connectionFactory.createConnection();
connection.start();
//第三步:通过connection创建session会话(上下文环境对象),用于接收消息,参数配置1为是否启用事务,
参数配置2为签收模式【一般我们设置为自动签收】
Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
//使用事务的方式进行消息的发送
// Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
//使用CLIENT端签收的方式
//Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
//第四步:通过session创建Destination对象,指的是一个客户端用来指定生产消息目标和消费消息来源的对象,
在PTP模式中,Destination被称作Queue即队列;在Pub/Sub模式,Destination被称作Topic即主题.
在程序中可以使用多个Queue和Topic.
Destination destination = session.createQueue("first");
//第五步:通过session对象创建消息的发送和接收对象(生产者和消费者)MessageProducer/MessageConsumer
MessageProducer messageProducer = session.createProducer(null);
//第六步:可以使用MessageProducer的setDeliveryMode方法为其设置持久化特性
和非持久化特性(DeliveryMode)
//messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
//第七步:使用JMS规范的TextMessage形式创建数据(通过session对象),并用MessageProducer
的send方法发送数据
for (int i = 1; i <= 10; i++) {
//TextMessage textMessage = session.createTextMessage("helloworld"+i);
TextMessage textMessage = session.createTextMessage("我是消息内容"+i);
//第一个参数: 目的地
//第二个参数: 消息
//第三个参数: 是否持久化
//第四个参数: 优先级【0-9 0-4表示普通 5-9表示加急 默认4】
//第五个参数: 消息在mq上的存放有效期【单位毫秒】
//messageProducer.send(destination, textMessage,
DeliveryMode.NON_PERSISTENT, i, 1000*60*2);
messageProducer.send(destination, textMessage);
//TimeUnit.SECONDS.sleep(1);
System.out.println("生产者:"+textMessage.getText());
}
//提交数据
session.commit();
//session.rollback();
if (connection!=null) {
connection.close();
}
}
}
接收端/消费者:
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Receiver {
public static void main(String[] args) {
// ConnectionFactory :连接工厂,JMS 用它创建连接
ConnectionFactory connectionFactory;
// Connection :JMS 客户端到JMS Provider 的连接
Connection connection = null;
// Session: 一个发送或接收消息的线程
Session session;
// Destination :消息的目的地;消息发送给谁.
Destination destination;
// 消费者,消息接收者
MessageConsumer consumer;
connectionFactory = new ActiveMQConnectionFactory(
"admin",
"1234", "tcp:/localhost:61616");
try {
// 构造从工厂得到连接对象
connection = connectionFactory.createConnection();
// 启动
connection.start();
// 获取操作连接
session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
// 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置
destination = session.createQueue("first");
consumer = session.createConsumer(destination);
while (true) {
// 设置接收者接收消息的时间,为了便于测试,这里谁定为100s
//TextMessage message = (TextMessage) consumer.receive(100000);
TextMessage message = (TextMessage) consumer.receive();
if (null != message) {
//System.out.println("收到消息" + message.getText());
System.out.println("消费数据:" + message.getText());
} else {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != connection)
connection.close();
} catch (Throwable ignore) {
}
}
}
}
生产者(没有事务手动签收):
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.MessageProducer;
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工厂对象【需填入用户名、密码、要连接的地址】
ActiveMQConnectionFactory connectionFactory
= new ActiveMQConnectionFactory("admin","1234","tcp://59.110.138.145:61616");
//第二步:通过ConnectionFactory工厂对象创建一个Connection连接,并且调用Connection的start方法
开启连接【connection默认是关闭的】
Connection connection = connectionFactory.createConnection();
connection.start();
//第三步:通过connection创建session会话(上下文环境对象),用于接收消息,参数配置1为是否启用事务,参数配置2为签收模式【一般我们设置为自动签收】
Session session = connection.createSession(Boolean.FALSE, Session.CLIENT_ACKNOWLEDGE);
//使用事务的方式进行消息的发送
// Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
//使用CLIENT端签收的方式
//Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
//第四步:通过session创建Destination对象,指的是一个客户端用来指定生产消息目标和消费消息来源的对象,在PTP模式中,Destination被称作Queue即队列;
在Pub/Sub模式,Destination被称作Topic即主题.在程序中可以使用多个Queue和Topic.
Destination destination = session.createQueue("first");
//第五步:通过session对象创建消息的发送和接收对象(生产者和消费者)MessageProducer/MessageConsumer
MessageProducer messageProducer = session.createProducer(null);
//第六步:可以使用MessageProducer的setDeliveryMode方法为其设置持久化特性和非持久化特性(DeliveryMode)
//messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
//第七步:使用JMS规范的TextMessage形式创建数据(通过session对象),并用MessageProducer的send方法发送数据
for (int i = 1; i <= 20; i++) {
//TextMessage textMessage = session.createTextMessage("helloworld"+i);
TextMessage textMessage = session.createTextMessage("我是消息内容"+i);
//第一个参数: 目的地
//第二个参数: 消息
//第三个参数: 是否持久化
//第四个参数: 优先级【0-9 0-4表示普通 5-9表示加急 默认4】
//第五个参数: 消息在mq上的存放有效期【单位毫秒】
//messageProducer.send(destination, textMessage, DeliveryMode.NON_PERSISTENT, i, 1000*60*2);
messageProducer.send(destination, textMessage);
//TimeUnit.SECONDS.sleep(1);
System.out.println("生产者:"+textMessage.getText());
}
//提交数据
//session.commit();
//session.rollback();
if (connection!=null) {
connection.close();
}
}
}
消费端(没有事务手动签收):
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Receiver {
public static void main(String[] args) {
// ConnectionFactory :连接工厂,JMS 用它创建连接
ConnectionFactory connectionFactory;
// Connection :JMS 客户端到JMS Provider 的连接
Connection connection = null;
// Session: 一个发送或接收消息的线程
Session session;
// Destination :消息的目的地;消息发送给谁.
Destination destination;
// 消费者,消息接收者
MessageConsumer consumer;
connectionFactory = new ActiveMQConnectionFactory(
"admin",
"1234", "tcp://59.110.138.145:61616");
try {
// 构造从工厂得到连接对象
connection = connectionFactory.createConnection();
// 启动
connection.start();
// 获取操作连接
session = connection.createSession(Boolean.FALSE, Session.CLIENT_ACKNOWLEDGE);
// 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置
destination = session.createQueue("first");
consumer = session.createConsumer(destination);
while (true) {
// 设置接收者接收消息的时间,为了便于测试,这里谁定为100s
//TextMessage message = (TextMessage) consumer.receive(100000);
TextMessage message = (TextMessage) consumer.receive();
if (null != message) {
//System.out.println("收到消息" + message.getText());
System.out.println("消费数据:" + message.getText());
message.acknowledge();
} else {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != connection)
connection.close();
} catch (Throwable ignore) {
}
}
}
}