消息的消费者接收消息可以采用两种方式:
1、consumer.receive() 或 consumer.receive(int timeout);
2、注册一个MessageListener。
采用第一种方式,消息的接收者会一直等待下去,直到有消息到达,或者超时。后一种方式会注册一个监听器,当有消息到达的时候,会回调它的
onMessage()方法。下面举例说明:
MessageConsumer comsumer = session.createConsumer(queue);
comsumer.setMessageListener(new MessageListener(){
@Override
public void onMessage(Message m) {
TextMessage textMsg = (TextMessage) m;
try {
System.out.println(textMsg.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
);
Queue实现的是点到点模型,在下面的例子中,启动2个消费者共同监听一个Queue,然后循环给这个Queue中发送多个消息,我们依然采用
ActiveMQ
import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
public class QueueTest {
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
//创建一个Queue
Queue queue = new ActiveMQQueue("testQueue");
//创建一个Session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//注册消费者1
MessageConsumer comsumer1 = session.createConsumer(queue);
comsumer1.setMessageListener(new MessageListener(){
public void onMessage(Message m) {
try {
System.out.println("Consumer1 get " + ((TextMessage)m).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
//注册消费者2
MessageConsumer comsumer2 = session.createConsumer(queue);
comsumer2.setMessageListener(new MessageListener(){
public void onMessage(Message m) {
try {
System.out.println("Consumer2 get " + ((TextMessage)m).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
//创建一个生产者,然后发送多个消息。
MessageProducer producer = session.createProducer(queue);
for(int i=0; i<10; i++){
producer.send(session.createTextMessage("Message:" + i));
}
}
}
运行这个例子会得到下面的输出结果:
Consumer1 get Message:0
Consumer2 get Message:1
Consumer1 get Message:2
Consumer2 get Message:3
Consumer1 get Message:4
Consumer2 get Message:5
Consumer1 get Message:6
Consumer2 get Message:7
Consumer1 get Message:8
Consumer2 get Message:9
分享到:
相关推荐
1. **创建连接和会话**:示例代码将展示如何通过JMS API创建到消息提供者的连接,并设置会话。会话是与消息服务器进行交互的工作单元,可以创建生产者和消费者。 2. **发送消息**:这通常涉及创建一个消息对象,...
3. **异步消费者**:通过使用监听容器,可以实现消息的异步处理,提高系统的响应性和并发能力。 4. **故障恢复和连接重试**:提供了连接失败后的自动恢复机制,增强了系统的健壮性。 实际应用场景广泛,例如: 1. *...
消费者可以是`MessageListener`接口的实现,通过监听消息,或者是`MessageConsumer`接口的实例,通过调用`receive()`方法被动接收消息。 4. **会话(Session)**:是线程安全的单线程上下文,用于创建生产者、消费...
- **异步消费**:消费者注册一个消息监听器(MessageListener),当消息到达时,系统自动调用监听器的`onMessage()`方法。 #### 五、JMS编程模型 JMS的编程模型主要包括以下几个核心组件: - **ConnectionFactory...
此外,JMS-1.1规范还涵盖了消息类型(如TextMessage、ObjectMessage)、消息选择器和消息监听器等功能。 在实际开发中,ActiveMQ-5.9和JMS-1.1的源码分析可以帮助我们: 1. **故障排查**:当遇到ActiveMQ运行异常或...
3. **Message生产者和消费者**:在源代码中,寻找使用`javax.jms`包的类,它们可能是消息的生产者或消费者。生产者创建并发送消息,而消费者(通常是MDB)接收并处理这些消息。 4. **事务管理**:由于JMS和EJB3都...
Camel的消费者端口监听JMS主题或队列,一旦接收到新消息,就会触发数据处理流程。接收到的消息可以被转换、过滤、聚合,然后保存到本地的目标位置,比如文件系统或数据库。这个过程同样使用Camel的组件和路由规则来...
在这个项目中,开发者可能已经实现了将JMS消息与Laravel的事件系统相结合,创建了消息生产者和消费者,并可能包含了一些示例消息处理逻辑。通过研究这个项目,你可以深入理解如何在实际项目中结合使用这两种技术,...
3. **消息类型**:JMS定义了五种消息类型:`TextMessage`(包含文本数据)、`ObjectMessage`(包含Java对象)、`BytesMessage`(包含二进制数据)、`MapMessage`(包含键值对数据)和`StreamMessage`(包含有序的...
3. **消费者**:消费者是从队列中接收消息或者订阅主题的应用程序或组件。它们同样通过JMS API来监听和获取消息。 4. **队列(Queue)**:队列是一种点对点的通信模型。每个消息仅被一个消费者接收,确保消息的顺序...
在JMS集成方面,Spring提供了`org.springframework.jms`包,用于简化消息生产者和消费者的创建与配置。 Java消息服务(JMS)是一种API,它定义了应用程序如何创建、发送、接收和读取消息。JMS允许应用程序在不关心...
本文将深入探讨Spring-JMS的基础知识,包括它的核心概念、配置以及如何与ActiveMQ这样的消息中间件进行集成。 **1. JMS简介** Java消息服务(Java Message Service,简称JMS)是一个标准,定义了应用程序如何创建、...
消费者则监听指定的队列或主题,当有新消息到达时,ActiveMQ会将消息分发给消费者。 **JMS API的使用** 在Java代码中,使用JMS API主要涉及以下步骤: 1. 创建ConnectionFactory,这是连接消息代理的桥梁。 2. ...
本文将深入探讨如何在Spring框架中整合Oracle AQ,以便实现高效、可靠的JMS(Java Message Service)通信。 首先,让我们了解Oracle AQ的基本概念。Oracle AQ是Oracle数据库的一部分,它提供了一种存储和转发消息的...
Spring JMS提供了对JMS API的高度封装,简化了消息生产者和消费者的实现,同时也支持事务管理和消息确认机制,极大地提升了开发效率和代码的可维护性。 首先,我们来看看Spring JMS的核心组件。主要包括...
Spring JMS(Java消息服务)是一个模块,是Spring框架的一部分,用于简化与JMS提供者交互的复杂性。这个"spring-jms-demo"项目显然是一个示例应用,它展示了如何在Spring环境中使用JMS来实现消息传递。让我们深入...
本篇文章将深入探讨如何使用Spring进行JMS消息的发送和接收。 ### 1. JMS概述 JMS是一种中间件协议,它定义了生产、存储和消费消息的标准接口。JMS提供两种类型的消息模型:点对点(Point-to-Point, P2P)和发布/...
【标题】"jms-amqp-demo" ...总的来说,"jms-amqp-demo"是一个实践教程,通过它你可以深入理解JMS与AMQP的结合使用,学习如何在Java应用程序中构建可靠的消息通信系统,这对于构建可扩展、松耦合的分布式系统至关重要。