java activemq demo_ActiveMQ入门实例Demo

本文通过Java实现ActiveMQ的点对点模型和发布/订阅模型的Demo,包括消息生产者和消费者,展示了如何使用ActiveMQ进行消息传递。点对点模型确保消息仅被一个消费者接收,而发布/订阅模型允许多个消费者接收消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面我们已经搭建和配置好了ActiveMQ,下面来看一个Demo,体验一下MQ。

JMS 消息模型

JMS消息服务应用程序结构支持两种模型:点对点模型,发布者/订阅者模型。

(1)点对点模型(Queue)

一个生产者向一个特定的队列发布消息,一个消费者从这个队列中依次读取消息。

模型特点:只有一个消费者获得消息。

(2)发布者/订阅者模型(Topic)

0个或多个订阅者可以接受特定主题的消息。

模型特点:多个消费者可获得消息。

Topic和Queue的最大区别在于Topic是以广播的形式,通知所有在线监听的客户端有新的消息,没有监听的客户端将收不到消息;而Queue则是以点对点的形式通知多个处于监听状态的客户端中的一个。

JMS消息格式

MapMessage -- key-value键值对

TextMessage -- 字符串对象

ObjcetMessage -- 一个序列化的Java对象

ByteMessage -- 一个未解释字节的数据流

StreamMessage -- Java原始值的数据流

点对点模型Demo

public classConstants {public static final String MQ_NAME = "parry";public static final String MQ_PASSWORD = "parry123";public static final String MQ_BROKETURL = "tcp://192.168.56.129:61616";

}

importjavax.jms.Connection;importjavax.jms.ConnectionFactory;importjavax.jms.Destination;importjavax.jms.JMSException;importjavax.jms.MessageProducer;importjavax.jms.Session;importjavax.jms.TextMessage;importorg.apache.activemq.ActiveMQConnectionFactory;importcom.parry.demo.constant.Constants;/***

*

* MSProduct 点对点模型-消息生产者

*

*/

public classMSProduct {public static voidmain(String[] args) {//连接工厂

ConnectionFactory factory;//连接实例

Connection connection = null;//收发的线程实例

Session session;//消息发送目标地址

Destination destination;//消息创建者

MessageProducer messageProducer;try{

factory= newActiveMQConnectionFactory(Constants.MQ_NAME, Constants.MQ_PASSWORD,

Constants.MQ_BROKETURL);//获取连接实例

connection =factory.createConnection();//启动连接

connection.start();//创建接收或发送的线程实例(创建session的时候定义是否要启用事务,且事务类型是Auto_ACKNOWLEDGE也就是消费者成功在Listern中获得消息返回时,会话自动确定用户收到消息)

session =connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);//创建队列(返回一个消息目的地)

destination = session.createQueue("parryQuene");//创建消息生产者

messageProducer =session.createProducer(destination);//创建TextMessage消息实体

TextMessage message = session.createTextMessage("我是parry,这是我的第一个消息!");

messageProducer.send(message);

session.commit();

}catch(JMSException e) {

e.printStackTrace();

}finally{if (connection != null) {try{

connection.close();

}catch(JMSException e) {

e.printStackTrace();

}

}

}

}

}

importjavax.jms.Connection;importjavax.jms.ConnectionFactory;importjavax.jms.Destination;importjavax.jms.JMSException;importjavax.jms.MessageConsumer;importjavax.jms.Session;importorg.apache.activemq.ActiveMQConnectionFactory;importcom.parry.demo.constant.Constants;/***

* MQConsumer 点对点--消息消费者

*

*/

public classMQConsumer {public static voidmain(String[] args) {//连接工厂

ConnectionFactory connectionFactory;//连接实例

Connection connection = null;//收发的线程实例

Session session;//消息发送目标地址

Destination destination;try{//实例化连接工厂

connectionFactory = newActiveMQConnectionFactory(Constants.MQ_NAME, Constants.MQ_PASSWORD, Constants.MQ_BROKETURL);//获取连接实例

connection =connectionFactory.createConnection();//启动连接

connection.start();//创建接收或发送的线程实例(消费者就不需要开启事务了)

session =connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);//创建队列(返回一个消息目的地)

destination = session.createQueue("parryQuene");//创建消息消费者

MessageConsumer consumer =session.createConsumer(destination);//注册消息监听

consumer.setMessageListener(newMQListerner());

}catch(JMSException e) {

e.printStackTrace();

}

}

}

importjavax.jms.JMSException;importjavax.jms.Message;importjavax.jms.MessageListener;importjavax.jms.TextMessage;/***

* MQListerner 生产者监听器

*

*/

public class MQListerner implementsMessageListener{

@Overridepublic voidonMessage(Message message) {try{

System.out.println(((TextMessage)message).getText());

}catch(JMSException e) {

e.printStackTrace();

}

}

}

发布者/订阅者模型Demo

(1)发布者

importjavax.jms.Connection;importjavax.jms.ConnectionFactory;importjavax.jms.Destination;importjavax.jms.JMSException;importjavax.jms.MessageProducer;importjavax.jms.Session;importjavax.jms.TextMessage;importorg.apache.activemq.ActiveMQConnectionFactory;importcom.parry.demo.constant.Constants;/***

* MQProducer 订阅消息的发送者

*

*/

public classMQProducer {public static voidmain(String[] args) {//连接工厂

ConnectionFactory factory;//连接实例

Connection connection = null;//收发的线程实例

Session session;//消息发送目标地址

Destination destination;try{//实例化连接工厂

factory = newActiveMQConnectionFactory(Constants.MQ_NAME, Constants.MQ_PASSWORD, Constants.MQ_BROKETURL);//获取连接实例

connection =factory.createConnection();//启动连接

connection.start();//创建接收或发送的线程实例(创建session的时候定义是否要启用事务,且事务类型是Auto_ACKNOWLEDGE也就是消费者成功在Listern中获得消息返回时,会话自动确定用户收到消息)

session =connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);//创建队列(返回一个消息目的地)

destination = session.createTopic("parryTopic");//创建消息发布者

MessageProducer producer =session.createProducer(destination);//创建TextMessage消息

TextMessage message = session.createTextMessage("你好,这是我发布的第一条消息!");//发布消息

producer.send(message);

}catch(JMSException e) {

e.printStackTrace();

}finally{if (connection != null) {try{

connection.close();

}catch(JMSException e) {

e.printStackTrace();

}

}

}

}

}

(2)订阅者01

importjavax.jms.Connection;importjavax.jms.ConnectionFactory;importjavax.jms.Destination;importjavax.jms.JMSException;importjavax.jms.MessageConsumer;importjavax.jms.Session;importorg.apache.activemq.ActiveMQConnectionFactory;importcom.parry.demo.constant.Constants;/***

* MQCousumer01 订阅-发布模式 订阅者01

*

*/

public classMQCousumer01 {public static voidmain(String[] args) {//连接工厂

ConnectionFactory factory;//连接实例

Connection connection = null;//收发的线程实例

Session session;//消息发送目标地址

Destination destination;try{//实例化连接工厂

factory = newActiveMQConnectionFactory(Constants.MQ_NAME, Constants.MQ_PASSWORD, Constants.MQ_BROKETURL);//获取连接实例

connection =factory.createConnection();//启动连接

connection.start();//创建接收或发送的线程实例

session =connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);//创建队列(返回一个消息目的地)

destination = session.createTopic("parryTopic");//创建消息订阅者

MessageConsumer consumer =session.createConsumer(destination);//消息发布者添加监听器

consumer.setMessageListener(newListerner01());

}catch(JMSException e) {

e.printStackTrace();

}

}

}

importjavax.jms.JMSException;importjavax.jms.Message;importjavax.jms.MessageListener;importjavax.jms.TextMessage;/***

* Listerner01 订阅者01的监听器

*

*/

public class Listerner01 implementsMessageListener{

@Overridepublic voidonMessage(Message message) {try{

System.out.println("订阅者01接收到消息:" +((TextMessage)message).getText());

}catch(JMSException e) {

e.printStackTrace();

}

}

}

(3)订阅者02

importjavax.jms.Connection;importjavax.jms.ConnectionFactory;importjavax.jms.Destination;importjavax.jms.JMSException;importjavax.jms.MessageConsumer;importjavax.jms.Session;importorg.apache.activemq.ActiveMQConnectionFactory;importcom.parry.demo.constant.Constants;/***

* MQCousumer02 订阅-发布模式 订阅者02

*

*/

public classMQCousumer02 {public static voidmain(String[] args) {//连接工厂

ConnectionFactory factory;//连接实例

Connection connection = null;//收发的线程实例

Session session;//消息发送目标地址

Destination destination;try{//实例化连接工厂

factory = newActiveMQConnectionFactory(Constants.MQ_NAME, Constants.MQ_PASSWORD, Constants.MQ_BROKETURL);//获取连接实例

connection =factory.createConnection();//启动连接

connection.start();//创建接收或发送的线程实例

session =connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);//创建队列(返回一个消息目的地)

destination = session.createTopic("parryTopic");//创建消息订阅者

MessageConsumer consumer =session.createConsumer(destination);//消息发布者添加监听器

consumer.setMessageListener(newListerner02());

}catch(JMSException e) {

e.printStackTrace();

}

}

}

importjavax.jms.JMSException;importjavax.jms.Message;importjavax.jms.MessageListener;importjavax.jms.TextMessage;/***

* Listerner02 订阅者02的监听器

*

*/

public class Listerner02 implementsMessageListener{

@Overridepublic voidonMessage(Message message) {try{

System.out.println("订阅者02接收到消息:"+((TextMessage)message).getText());

}catch(JMSException e) {

e.printStackTrace();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值