`

ActiveMQ使用笔记(三)ActiveMQ消息发送与接收

 
阅读更多

 

配置完了持久化之后,我们就可以使用代码来发送和接收ActiveMQ中的消息了,我这里配置的持久化是KahaDB。
需要导入的jar包:

一段发送消息的代码:

package send;

import javax.jms.Connection;
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;


public class SendTest {
	public static void send(){
	    try {
	            // 创建一个连接工厂
	            String url = "tcp://localhost:61616";
	            ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
	            // 设置用户名和密码,这个用户名和密码在conf目录下的credentials.properties文件中,也可以在activemq.xml中配置
	            connectionFactory.setUserName("system");
	            connectionFactory.setPassword("manager");
	            // 创建连接
	            Connection connection = connectionFactory.createConnection();
	            connection.start();
	            // 创建Session,参数解释:
	            // 第一个参数是否使用事务:当消息发送者向消息提供者(即消息代理)发送消息时,消息发送者等待消息代理的确认,没有回应则抛出异常,消息发送程序负责处理这个错误。
	            // 第二个参数消息的确认模式:
	            // AUTO_ACKNOWLEDGE : 指定消息提供者在每次收到消息时自动发送确认。消息只向目标发送一次,但传输过程中可能因为错误而丢失消息。
	            // CLIENT_ACKNOWLEDGE : 由消息接收者确认收到消息,通过调用消息的acknowledge()方法(会通知消息提供者收到了消息)
	            // DUPS_OK_ACKNOWLEDGE : 指定消息提供者在消息接收者没有确认发送时重新发送消息(这种确认模式不在乎接收者收到重复的消息)。
	            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
	            // 创建目标,就创建主题也可以创建队列
	            Destination destination = session.createQueue("test");
	            // 创建消息生产者
	            MessageProducer producer = session.createProducer(destination);
	            // 设置持久化,DeliveryMode.PERSISTENT和DeliveryMode.NON_PERSISTENT
	            producer.setDeliveryMode(DeliveryMode.PERSISTENT);
	            // 创建消息
	            String text = "Hello ActiveMQ!";
	            TextMessage message = session.createTextMessage(text);
	            // 发送消息到ActiveMQ
	            producer.send(message);
	            System.out.println("Message is sent!");
	            // 关闭资源
	            session.close();
	            connection.close();
	        }
	        catch (Exception e) {
	            e.printStackTrace();
	        }
	    }
	public static void main(String[] args) {
		new SendTest().send();
	}
}

 执行了上面的发送方法之后,在ActiveMQ的监视控制可以看到有一个test队列,并且有一条消息,如图:

 

 

点击队列名test,然后点击消息ID即可查看消息内容,如图:

 

 

 

如果DeliveryMode没有设置或者设置为NON_PERSISTENT,那么重启MQ之后消息就会丢失。
一段接收消息的代码:

 

 

 

package send;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;

public class GetTest {
	public static void get(){
	    try{
	        String url = "tcp://localhost:61616";
	        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
	        // 设置用户名和密码,这个用户名和密码在conf目录下的credentials.properties文件中,也可以在activemq.xml中配置
	        connectionFactory.setUserName("system");
	        connectionFactory.setPassword("manager");
	        // 创建连接
	        Connection connection = connectionFactory.createConnection();
	        connection.start();
	        // 创建Session
	        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
	        // 创建目标,就创建主题也可以创建队列
	        Destination destination = session.createQueue("test");
	        // 创建消息消费者
	        MessageConsumer consumer = session.createConsumer(destination);
	        // 接收消息,参数:接收消息的超时时间,为0的话则不超时,receive返回下一个消息,但是超时了或者消费者被关闭,返回null
	        Message message = consumer.receive(1000);
	        if (message instanceof TextMessage) {
	            TextMessage textMessage = (TextMessage) message;
	            String text = textMessage.getText();
	            System.out.println("Received: " + text);
	        } else {
	            System.out.println("Received: " + message);
	        }
	        consumer.close();
	        session.close();
	        connection.close();
	    } catch (Exception e) {
	        e.printStackTrace();
	    }
	}
	public static void main(String[] args) {
		new GetTest().get();
	}
}

 执行了上面的接收方法之后,在ActiveMQ的监视控制可以看到test队列的消息已经被消费了,如图:

 

这里的代码只是测试用,在正式开发中一般与Spring结合使用jmsTemplate来发送消息,现实JMS的MessageListener来监听消息。

分享到:
评论

相关推荐

    ActiveMQ学习笔记之九--发送消息到队列中

    这篇"ActiveMQ学习笔记之九--发送消息到队列中"主要探讨的是如何通过编程方式向ActiveMQ队列发送消息,这对于理解和应用消息中间件至关重要。 首先,我们要理解ActiveMQ中的队列(Queue)概念。队列是一种先进先出...

    activemq activeMq笔记

    在 ActiveMQ 中,生产者可以将消息发送到消息队列中,而消费者则可以从队列中取出消息进行处理。这种模式使得消息的发送者和接收者不需要同时在线。 - **点对点通信**:在这种模式下,每个消息被发送后只会被一个...

    ActiveMQ 教学视频/教程 /附带笔记等资源

    - **消息队列(Message Queue)**:ActiveMQ 中,消息被发送到队列,然后由消费者按需接收,遵循先进先出(FIFO)原则。 - **主题(Topic)**:与队列不同,主题支持发布/订阅模式,多个订阅者可以同时接收到同一...

    ActiveMQ笔记

    **ActiveMQ笔记** ActiveMQ是Apache软件基金会的一个开源项目,它是Java消息服务(JMS)的一个实现,专门用于处理消息传递。作为一个中间件,ActiveMQ允许应用程序之间通过异步通信来解耦它们的功能,提高系统的可...

    activeMQ笔记

    这意味着如果目标接收方(例如一个JMS服务)在消息发送时处于离线状态,则该消息将丢失,不会再次尝试发送。 - **优点**:使用非持久性消息可以减少系统开销,提高消息处理速度,因为这些消息不需要被保存到磁盘上...

    ActiveMQ In Action翻译笔记-更新版2011

    它是一种与具体平台无关的、面向消息的中间件的API,用于简化和规范化在两个应用程序之间,或分布式系统中发送消息的程序设计。 - **MOM(Message-Oriented Middleware)**是一种基于消息的中间件,它的核心作用是...

    activemq系列笔记

    JMS是一种标准API,定义了在Java环境中如何创建、发送、接收和读取消息的标准接口。JMS允许开发者在不同的消息中间件上编写代码,而不用担心具体的实现细节。JMS提供两种消息模型:点对点(Point-to-Point, PTP)和...

    消息队列activemq学习笔记

    它允许应用之间通过发送消息进行通信,而无需直接调用对方。 ##### 前言:MQ=消息中间件 消息可以是任何形式的数据,例如文本、图片等。中间件则充当了发送者和接收者之间的桥梁,确保数据能够准确无误地被传输到...

    ActiveMQ学习笔记之一--ActiveMQ下载

    **ActiveMQ学习笔记之一——ActiveMQ下载** ActiveMQ是Apache软件基金会开发的一个开源消息中间件,它是基于Java消息服务(JMS)规范的,用于在分布式系统中传递消息。作为一个高性能、可伸缩且可靠的解决方案,...

    Apache ActiveMQ学习笔记【原创:mq的方式有两种:点到点和发布/订阅】

    ### Apache ActiveMQ 学习笔记 #### 一、ActiveMQ简介与安装 ##### 1.1 ActiveMQ概述 Apache ActiveMQ 是一个完全...此外,通过示例代码,我们也了解了如何使用 Java 和 Spring 框架与 ActiveMQ 集成来发送消息。

    ActiveMq笔记.zip

    **ActiveMQ笔记** ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它是Java Message Service (JMS) 的实现,广泛应用于分布式系统中的异步通信。本笔记将详细探讨ActiveMQ的核心概念、工作原理以及实际应用...

    ActiveMQ学习笔记(二) JMS与Spring

    - **生产者与消费者**:生产者负责创建并发送消息,消费者则接收并处理消息。 2. **Spring对JMS的支持** - **JmsTemplate**:Spring提供的核心类,用于简化JMS消息的发送和接收操作。 - **MessageListener...

    activeMQ总结

    3. 生产者与消费者:消息的生产者(点对点的QueueSender和发布者TopicPublisher)负责发送消息,消费者(点对点的QueueReceiver和订阅者TopicSubscriber)负责接收消息。 4. 消息:消息由消息头(header)、属性...

    分享一些ActiveMQ的资料

    开发者可以通过查阅此文档了解如何创建消费者、生产者,如何发送和接收消息,以及如何配置各种消息协议和传输层。 2. **ActiveMQ学习笔记.doc**: 这可能是个人或社区成员编写的笔记,涵盖了ActiveMQ的基本概念、...

    active mq 学习笔记

    3. **Spring集成**:ActiveMQ易于与使用Spring框架的应用集成,并且支持Spring 2.0的特性。 4. **持久化机制**:支持通过JDBC和Journal两种方式实现高效的消息持久化。 5. **高可用性**:支持高性能的集群配置、...

    ActiveMQ.pdf

    而异步消息处理则允许发送方发送消息之后不等待,即可继续执行后续操作。消息系统将消息存储在队列中,由接收方根据自己的处理能力异步地从队列中取走并进行处理。这种机制极大地提高了系统的吞吐量,使得系统能够...

    ActiveMQ+In+Action翻译笔记-+更新版

    在MOM架构中,发送者与接收者之间的通信是异步的,发送者不需要等待接收者处理消息就能继续进行其他操作。此外,MOM还支持一对多的通信模式,即一个消息可以有多个接收者。 JMS提供了两种消息模型,点对点(PTP)和...

    ActiveMQ+In+Action学习笔记.docx

    【ActiveMQ 在行动:深入解析Java消息服务】 ActiveMQ 是一款开源的消息中间件,由Apache基金会维护,它实现了Java消息服务(JMS)规范,为分布式系统提供了高效、可靠的异步消息传递。JMS是一种标准,它定义了Java...

    ActiveMQ in Action翻译笔记2011.pdf

    它允许发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,然后在适当的时候将消息转发给接收者。MOM系统可以实现异步通信、一对多通信,并且发送者和接收者无需同步等待,他们的生命周期可以是独立...

Global site tag (gtag.js) - Google Analytics