`

深入JMS - 3 - 消息监听者(转)

    博客分类:
  • JMS
阅读更多

消息的消费者接收消息可以采用两种方式:
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
分享到:
评论

相关推荐

    jms-1_0_2-upd-sampleprograms.zip

    1. **创建连接和会话**:示例代码将展示如何通过JMS API创建到消息提供者的连接,并设置会话。会话是与消息服务器进行交互的工作单元,可以创建生产者和消费者。 2. **发送消息**:这通常涉及创建一个消息对象,...

    spring-jms-4.3.4.RELEASE.zip

    3. **异步消费者**:通过使用监听容器,可以实现消息的异步处理,提高系统的响应性和并发能力。 4. **故障恢复和连接重试**:提供了连接失败后的自动恢复机制,增强了系统的健壮性。 实际应用场景广泛,例如: 1. *...

    jms-1.1接口定义代码

    消费者可以是`MessageListener`接口的实现,通过监听消息,或者是`MessageConsumer`接口的实例,通过调用`receive()`方法被动接收消息。 4. **会话(Session)**:是线程安全的单线程上下文,用于创建生产者、消费...

    深入浅出JMS-JMS介绍说明文档

    - **异步消费**:消费者注册一个消息监听器(MessageListener),当消息到达时,系统自动调用监听器的`onMessage()`方法。 #### 五、JMS编程模型 JMS的编程模型主要包括以下几个核心组件: - **ConnectionFactory...

    ActiveMQ -5.9和jms-1.1源码下载

    此外,JMS-1.1规范还涵盖了消息类型(如TextMessage、ObjectMessage)、消息选择器和消息监听器等功能。 在实际开发中,ActiveMQ-5.9和JMS-1.1的源码分析可以帮助我们: 1. **故障排查**:当遇到ActiveMQ运行异常或...

    jms-ejb3 source code

    3. **Message生产者和消费者**:在源代码中,寻找使用`javax.jms`包的类,它们可能是消息的生产者或消费者。生产者创建并发送消息,而消费者(通常是MDB)接收并处理这些消息。 4. **事务管理**:由于JMS和EJB3都...

    ApacheCamel-JMS-ActiveMQ

    Camel的消费者端口监听JMS主题或队列,一旦接收到新消息,就会触发数据处理流程。接收到的消息可以被转换、过滤、聚合,然后保存到本地的目标位置,比如文件系统或数据库。这个过程同样使用Camel的组件和路由规则来...

    Laravel开发-jms-format-laravel .zip

    在这个项目中,开发者可能已经实现了将JMS消息与Laravel的事件系统相结合,创建了消息生产者和消费者,并可能包含了一些示例消息处理逻辑。通过研究这个项目,你可以深入理解如何在实际项目中结合使用这两种技术,...

    JMS-ActiveMQ入门实例

    3. **消息类型**:JMS定义了五种消息类型:`TextMessage`(包含文本数据)、`ObjectMessage`(包含Java对象)、`BytesMessage`(包含二进制数据)、`MapMessage`(包含键值对数据)和`StreamMessage`(包含有序的...

    JMS消息队列机制及案例

    3. **消费者**:消费者是从队列中接收消息或者订阅主题的应用程序或组件。它们同样通过JMS API来监听和获取消息。 4. **队列(Queue)**:队列是一种点对点的通信模型。每个消息仅被一个消费者接收,确保消息的顺序...

    spring整合JMS-居于ActiveMQ实现

    在JMS集成方面,Spring提供了`org.springframework.jms`包,用于简化消息生产者和消费者的创建与配置。 Java消息服务(JMS)是一种API,它定义了应用程序如何创建、发送、接收和读取消息。JMS允许应用程序在不关心...

    spring-jms入门

    本文将深入探讨Spring-JMS的基础知识,包括它的核心概念、配置以及如何与ActiveMQ这样的消息中间件进行集成。 **1. JMS简介** Java消息服务(Java Message Service,简称JMS)是一个标准,定义了应用程序如何创建、...

    ActiveMQ在JMS中的运用-深入浅出JMS

    消费者则监听指定的队列或主题,当有新消息到达时,ActiveMQ会将消息分发给消费者。 **JMS API的使用** 在Java代码中,使用JMS API主要涉及以下步骤: 1. 创建ConnectionFactory,这是连接消息代理的桥梁。 2. ...

    spring-jms-oracle-aq.rar_oracle aq_spring oracle aq_spring oracl

    本文将深入探讨如何在Spring框架中整合Oracle AQ,以便实现高效、可靠的JMS(Java Message Service)通信。 首先,让我们了解Oracle AQ的基本概念。Oracle AQ是Oracle数据库的一部分,它提供了一种存储和转发消息的...

    spring-jms源码

    Spring JMS提供了对JMS API的高度封装,简化了消息生产者和消费者的实现,同时也支持事务管理和消息确认机制,极大地提升了开发效率和代码的可维护性。 首先,我们来看看Spring JMS的核心组件。主要包括...

    spring-jms-demo

    Spring JMS(Java消息服务)是一个模块,是Spring框架的一部分,用于简化与JMS提供者交互的复杂性。这个"spring-jms-demo"项目显然是一个示例应用,它展示了如何在Spring环境中使用JMS来实现消息传递。让我们深入...

    Spring发送接收JMS消息

    本篇文章将深入探讨如何使用Spring进行JMS消息的发送和接收。 ### 1. JMS概述 JMS是一种中间件协议,它定义了生产、存储和消费消息的标准接口。JMS提供两种类型的消息模型:点对点(Point-to-Point, P2P)和发布/...

    jms-amqp-demo

    【标题】"jms-amqp-demo" ...总的来说,"jms-amqp-demo"是一个实践教程,通过它你可以深入理解JMS与AMQP的结合使用,学习如何在Java应用程序中构建可靠的消息通信系统,这对于构建可扩展、松耦合的分布式系统至关重要。

Global site tag (gtag.js) - Google Analytics