`
hhhhh-kk#qq.com
  • 浏览: 58287 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

深入掌握JMS(四):实战Queue

阅读更多

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

可以看出每个消息直被消费了一次,但是如果有多个消费者同时监听一个Queue的话,无法确定一个消息最终会被哪一个消费者消费。

分享到:
评论

相关推荐

    深入掌握 JMS(java message service)

    ### 深入掌握 JMS(Java Message Service) #### JMS 基础概念 - **JMS**(Java Message Service)是一种Java平台中的消息中间件技术标准,它定义了一套标准API,用于应用程序之间的消息传递。JMS的出现极大地简化...

    JMS规范培训教程 中文版

    **正文** JMS(Java Message ...本教程的目的是帮助开发者掌握JMS的使用,从而能够更好地设计和实现基于消息传递的应用程序。无论你是初学者还是有经验的开发者,都可以从这个中文版的JMS规范培训教程中受益匪浅。

    java开发实战经典

    通过《Java开发实战经典》这本书的学习,读者不仅可以掌握Java语言的精髓,还能了解到实际开发中的最佳实践,提升编程能力,为参与复杂项目的开发打下坚实基础。书中的每个章节都可能包含丰富的示例代码,帮助读者...

    2019实战ActiveMQ集群与应用实战视频教程

    根据提供的文件信息,以下是从标题、描述、...通过学习这些知识点,不仅可以帮助开发者深入了解 ActiveMQ 的工作原理,还能够掌握如何在实际项目中有效地利用 ActiveMQ 解决消息传递问题,提高系统的稳定性和扩展性。

    ActiveMQ实战(英文版)

    这本书《ActiveMQ实战(英文版)》旨在深入探讨如何在实际环境中有效地使用和管理ActiveMQ。 ActiveMQ的核心功能包括: 1. **消息传递**:ActiveMQ作为消息代理,允许应用程序之间通过发送和接收消息进行异步通信。...

    基于消息中间件的学习记录以及源码示例【JMS、AMQP、ActiveMQ、RocketMQ】.zip

    本文将深入探讨基于消息中间件的学习记录,包括Java消息服务(JMS)、先进消息队列协议(AMQP)以及两个流行的开源实现:ActiveMQ和RocketMQ。 首先,Java消息服务(JMS)是一种标准API,用于在Java应用程序之间...

    ActiveMQ实战——实现一个简易版的聊天室

    在本篇《ActiveMQ实战——实现一个简易版的聊天室》中,我们将深入探讨如何利用Apache ActiveMQ构建一个简单的在线聊天应用。ActiveMQ是Apache软件基金会的一个开源项目,它是一款功能强大的消息中间件,用于在...

    Java开发实战经典(名师讲坛)].李兴华.zip

    《Java开发实战经典》是李兴华老师的一部著作,主要针对Java编程语言进行深入浅出的讲解,旨在帮助读者掌握Java开发的核心技能,并具备实际项目开发的能力。这本书的内容覆盖了Java开发的各个方面,包括基础语法、...

    私塾在线 高级java软件架构师实战培训视频教程 阶段一 代码及目录 85-90 讲 共148讲

    本节可能深入探讨了如何创建、管理和优化Destination,包括队列(Queue)和主题(Topic)的高级用法,以及如何处理并发访问和负载均衡,确保高效的消息传递。 2. **MessageDispatch高级特性**(第86、87、88、90节...

    activeMQ实战demo

    在这个“ActiveMQ实战demo”中,我们将深入探讨如何使用ActiveMQ进行消息发送和接收,并了解其工作原理。 首先,让我们了解一下JMS。JMS是Java平台上的一个标准接口,定义了生产、消费、管理和消息队列的标准API。...

    how2j_offline_2020.01.31.rar

    "how2j_offline_2020.01.31.rar" 是一个专为Java初学者和进阶者准备的离线学习资源包,包含了丰富的Java编程知识和实战教程。这个压缩包旨在帮助用户在没有网络的情况下也能深入学习Java技术,从而提升其编程能力。 ...

    ActiveMQ.in.Action

    《ActiveMQ in Action》是一本深入探讨Apache ActiveMQ的实战指南,主要面向那些希望理解和掌握消息中间件技术,特别是ActiveMQ的开发者和系统管理员。这本书详细介绍了如何利用ActiveMQ构建可扩展、高可用且可靠的...

    Websphere+MQ全套教程合集.rar

    7. 发送与接收消息:掌握编写程序来发送和接收消息的方法,使用API(如Java的JMS接口或C的MQSeries API)。 8. 配置通道:了解通道的作用,学习设置传输通道、服务器通道,进行SSL加密和认证配置。 四、高级特性 ...

    activemq-example

    本篇文章将深入探讨`activemq-example`,即ActiveMQ的实际应用案例,通过分析`activemq-in-action-read-only`中的内容,帮助读者理解并掌握ActiveMQ的核心概念和使用方法。 一、ActiveMQ基本概念 1. 消息与队列:...

    实战EJB_CN(推荐)

    本资源“实战EJB_CN”是一份针对EJB的中文入门指南,旨在帮助开发者快速掌握EJB的核心概念和技术,从而更好地开发和部署大型企业系统。 ### EJB简介 EJB是Java EE(Java Platform, Enterprise Edition)的一部分,...

    ActiveMQ in Action

    《ActiveMQ in Action》这本书是关于消息中间件Apache ActiveMQ的实战指南,旨在帮助读者深入理解和熟练使用这一强大的开源消息代理。Apache ActiveMQ是Java消息服务(JMS)的实现,广泛应用于分布式系统中的异步...

    IBM WebSphere MQ Java编程(中文版)

    #### 四、实战操作指南 1. **配置环境**: - 安装和配置WebSphere MQ服务器。 - 配置Java开发环境,包括安装必要的库和依赖项。 2. **示例代码分析**: - 提供了一些示例代码,用于演示如何使用Java API与...

    activemq实战项目,同ssh框架整合(生产者+消费者)

    通过这个实战项目,开发者可以深入理解如何在Java Web环境中使用ActiveMQ,以及如何解决在实际应用中可能出现的问题,如消息的可靠传输和幂等问题。同时,它也提供了一个良好的学习平台,帮助初学者掌握SSH与...

    JavaEECoreFrameworkPractisesV2Code:Java EE核心框架实战(第2版)源代码

    《Java EE核心框架实战(第2版)》的源代码包"JavaEECoreFrameworkPractisesV2Code-master"提供了一次深入理解Java企业级应用开发的宝贵机会。这个开源项目旨在帮助开发者们掌握Java EE平台的核心技术,包括但不限于...

    Jboss EJB3.0 实例教程.pdf

    - **适用人群**:本教程适用于初学者及具有一定Java基础的学习者,特别是那些希望深入了解并掌握EJB 3.0技术的开发者。 - **内容特色**:通过实例教学的方式,帮助读者从实践中学习和掌握EJB 3.0的核心概念和技术...

Global site tag (gtag.js) - Google Analytics