`

深入掌握JMS(七)DeliveryMode例子

    博客分类:
  • JMS
阅读更多

在下面的例子中,分别发送一个Persistent和nonpersistent的消息,然后关闭退出JMS。

import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;

public class DeliveryModeSendTest {

    public static void main(String[] args) throws Exception {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
   
        Connection connection = factory.createConnection();
        connection.start();
       
        Queue queue = new ActiveMQQueue("testQueue");
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
               
        MessageProducer producer = session.createProducer(queue);
        producer.setDeliveryMode(DeliveryMode.PERSISTENT);
        producer.send(session.createTextMessage("A persistent Message"));
       
        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        producer.send(session.createTextMessage("A non persistent Message"));
       
        System.out.println("Send messages sucessfully!");
    }
}

    运行上面的程序,当输出“Send messages sucessfully!”时,说明两个消息都已经发送成功,然后我们结束它,来停止JMS Provider。

    接下来我们重新启动JMS Provicer,然后添加一个消费者:

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
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 DeliveryModeReceiveTest {

    public static void main(String[] args) throws Exception {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
   
        Connection connection = factory.createConnection();
        connection.start();
       
        Queue queue = new ActiveMQQueue("testQueue");
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
       
        MessageConsumer comsumer = session.createConsumer(queue);
        comsumer.setMessageListener(new MessageListener(){
            public void onMessage(Message m) {
                try {
                    System.out.println("Consumer get " + ((TextMessage)m).getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

运行上面的程序,可以得到下面的输出结果:

Consumer get A persistent Message

可以看出消息消费者只接收到一个消息,它是一个Persistent的消息。而刚才发送的non persistent消息已经丢失了。

另外, 如果发送一个non persistent消息, 而刚好这个时候没有消费者在监听, 这个消息也会丢失.

分享到:
评论

相关推荐

    javax.jms.jar下载

    javax.jms.DeliveryMode.class javax.jms.Destination.class javax.jms.ExceptionListener.class javax.jms.IllegalStateException.class javax.jms.InvalidClientIDException.class javax.jms....

    javax.jms.jar

    javax.jms.DeliveryMode.class javax.jms.Connection.class javax.jms.Session.class javax.jms.ConnectionMetaData.class javax.jms.ExceptionListener.class javax.jms.ServerSessionPool.class javax.jms....

    JMS学习手册

    JMS(Java Message Service)是一种Java企业版(Java EE)技术...从这些知识点来看,JMS学习手册提供了一个全面的框架,帮助开发者了解和掌握JMS的关键概念、架构和编程模型,是学习和应用Java消息服务技术的宝贵资源。

    基于Java通讯开发jms源代码 (jms通讯开发源码)

    基于Java通讯开发jms源代码 (jms通讯开发源码) java,net,socket,通讯开发,jms /* * @(#)Message.java 1.60 02/04/09 * * Copyright 1997-2002 Sun Microsystems, Inc. All Rights Reserved. * * SUN ...

    JMS教程+activemq以及activemq和tomcat的整合

    **JMS教程** Java Message Service(JMS)是Java平台中用于企业级应用间进行异步消息传递的标准接口。它允许应用程序创建、发送、接收...在实际项目中,结合提供的实例代码和配置,开发者可以深入理解并实践这些概念。

    ActiveMQ in Action

    在深入探讨ActiveMQ的具体应用之前,我们需要先了解Java消息服务(Java Message Service,简称JMS)的基础概念及其核心构件。JMS是一种Java平台中的消息中间件标准,它允许应用程序组件创建、发送、接收和读取信息,...

    ActiveMQ代码示例

    **ActiveMQ 深度解析与代码实践** ...理解并熟练掌握 ActiveMQ 的使用,对于构建高可用、高性能的分布式系统至关重要。通过实践和学习提供的代码示例,可以深入理解 ActiveMQ 的核心特性和应用场景。

    activeMQ笔记

    了解和掌握这些消息正文格式对于正确使用ActiveMQ和其他基于JMS的应用至关重要。 通过以上的知识点梳理,我们可以看到ActiveMQ在消息传递方面提供了丰富的特性和灵活性,适用于各种不同的应用场景。无论是需要高度...

    ActiveMQDemo实战.pdf

    然后创建消息生产者(MessageProducer),并设置其为非持久性模式(DeliveryMode.NON_PERSISTENT),意味着消息将不会被保存到磁盘上。生产者准备就绪后,创建一个文本消息(TextMessage),将消息内容封装进消息...

    rabbitmq笔记及面试要点

    【标题】:深入理解RabbitMQ及其面试关键点 【正文】: RabbitMQ作为一款广泛应用的消息...理解并掌握这些知识点,不仅可以加深对RabbitMQ的理解,也有助于在面试中展现出对分布式系统架构和消息中间件的深入认识。

    消息中间件面试专题及答案

    - **异步方式**:发送方无需等待接收方响应,提高系统效率,Java中的JMS支持点对点和发布/订阅两种异步消息模式。 6. **ActiveMQ调优** - 使用非持久化消息以减少磁盘I/O。 - 使用事务确保消息批量发送成功,...

    解析ActiveMQ的使用说明总结

    在本文中,我们将深入探讨ActiveMQ的一些关键知识点,包括消息过滤、错误处理、发送模式、负载均衡以及配置选项。 1. **消息过滤(Message Filtering)** ActiveMQ支持消息选择器,允许你指定接收特定类型的消息。...

    Java rabbitMQ源码

    在声明队列时设置`durable`属性为`true`,并在发送消息时设置`deliveryMode`为2,即可实现消息的持久化。 10. **消费者公平分配**:RabbitMQ有公平分配策略,当多个消费者并行消费一个队列时,消息会被均匀地分发给...

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

    具体实现中可能还需要定义消息创建器 (`MessageCreator`) 和配置消息属性(例如 `DeliveryMode`、`Session` 等),以便实际发送消息。 #### 四、总结 通过以上介绍,我们可以看到 ActiveMQ 提供了两种主要的消息...

    0924分布式消息通信-ActiveMQ1

    本文将深入探讨ActiveMQ 的一些核心特性,包括消息发送策略、持久化、消费者行为、消息确认机制以及Spring 集成。 1. **消息发送策略**: - **持久化消息**:默认情况下,生产者发送的消息是持久化的,即使在消息...

    rabbitmq-javadoc

    4. **枚举和异常**:RabbitMQ Java 客户端中可能包含一些枚举类型,如 `DeliveryMode`,表示消息的持久化级别,以及自定义的异常类,如 `IOException` 的子类,用于处理与网络或数据传输相关的错误。 5. **示例代码...

    各种消息队列技术对比分享

    对于Java开发者来说,深入理解并掌握消息队列的工作原理和技术特性,对于构建高效稳定的分布式应用至关重要。无论是从系统设计的角度还是从实际应用的角度来看,合理利用消息队列技术都是十分必要的。

    ios应用源码之相册拾取器 2018128

    本文将深入探讨“ios应用源码之相册拾取器 2018128”这个主题,包括源码解析、关键API的使用以及实现流程。 首先,iOS提供了一个名为Photos Framework的库,它是处理照片和视频的核心组件。在创建相册拾取器时,...

Global site tag (gtag.js) - Google Analytics