ActiveMQ之deliveryMode

在下面的例子中,分别发送一个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消息, 而刚好这个时候没有消费者在监听, 这个消息也会丢失.

时间: 2024-10-06 02:43:03

ActiveMQ之deliveryMode的相关文章

ActiveMQ入门实例

1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5.1-bin.zip,然后双击apache-activemq-5.5.1\bin\activemq.bat运行ActiveMQ程序. 启动ActiveMQ以后,登陆:http://localhost:8161/admin/,创建一个Queue,命名为FirstQueue. 3.创建Eclipse项目并运行 创建project:Ac

activemq的几种基本通信方式总结

简介 在前面一篇文章里讨论过几种应用系统集成的方式,发现实际上面向消息队列的集成方案算是一个总体比较合理的选择.这里,我们先针对具体的一个消息队列Activemq的基本通信方式进行探讨.activemq是JMS消息通信规范的一个实现.总的来说,消息规范里面定义最常见的几种消息通信模式主要有发布-订阅.点对点这两种.另外,通过结合这些模式的具体应用,我们在处理某些应用场景的时候也衍生出来了一种请求应答的模式.下面,我们针对这几种方式一一讨论一下. 基础流程 在讨论具体方式的时候,我们先看看使用ac

ActiveMQ简单入门

一.创建一个简单的Hello World案例 首先需要导入activemq-all-5.14.5.jar包,写生产端: package com.ietree.mq.helloworld; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.MessageProduc

lesson5:利用jmeter来压测消息队列(activemq)

本文讲述了利用jmeter来压测消息队列,其中消息队列采用apache的activemq,jmeter本身是支持符合jms标准消息队列的压测,由于jmeter的官方sampler配置比较复杂,本文直接使用sdk的方式来压测,与生产实际使用更加接近,各位如对官方的sampler感兴趣,可以自行去配置完成. 准备工作:下载activemq 地址:http://activemq.apache.org 本文中的activemq采用的是5.9.0版本. jMetterLessons工程源码地址:https

随笔记:ActiveMQ搭建与使用

下载 到ActiveMQ官网,找到下载点. 目前, 官网为http://activemq.apache.org/ Linux版本下载点之一为:http://apache.fayea.com/activemq/5.11.1/apache-activemq-5.11.1-bin.tar.gz 启动 下载到本机,并解压 wget http://apache.fayea.com/activemq/5.11.1/apache-activemq-5.11.1-bin.tar.gz tar -xf ./apa

ActiveMQ的安装、运用

1.下载ActiveMQ:http://activemq.apache.org/ 2.解压包,并找到activemq.bat,双击打开一个控制台,跟你打开tomcat一样的.如图: 3.在浏览器查看你的activemq是否正确启动:http://localhost:8161/admin,打开之后看到这样: 用户名:admin  密码:admin 确定即可登录. 4.你可以新建一个Queue,在  Queue Name后面的方框中填入"MyFirstQueue",点击正后方"C

ActiveMQ使用示例之Topic

非持久的Topic消息示例  对于非持久的Topic消息的发送基本跟前面发送队列信息是一样的,只是把创建Destination的地方,由创建队列替换成创建Topic,例如: Destination destination = session.createTopic("MyTopic"); 对于非持久的Topic消息的接收1:必须要接收方在线,然后客户端再发送信息,接收方才能接收到消息2:同样把创建Destination的地方,由创建队列替换成创建Topic,例如:Destination

46.ActiveMQ开篇(Hello World、安全认证、Connection、Session、MessageProducer、MessageConsumer)

一.背景介绍 CORBA\DCOM\RMI等RPC中间件技术已经广泛应用于各个领域,但是面对规模和复杂度都越来越高的分布式系统,这些技术慢慢显现出局限性: 同步通信:客户发出调用后,必须等待服务完成处理并返回结果后才能继续执行: 客户端和服务端的生命周期密切耦合:客户进程和服务对象进行必须都正常运行,如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户会接收到异常. 点对点通信:客户的一次调用只发送给一个单独的目标对象. 面向消息的中间件较好地解决了上面的问题(Message Orient

ActiveMq整理之java应用

一.JMS 更多介绍参考 "http://baike.baidu.com/link?url=LNCEOGgqEX-uSKuRJooyG1RSfS7CTWDKYT8OOouhxLk_yWNN-0wNSWq7KjNQ259a9pfL95janJi8v8-drvdHqa" 1.1背景 当前,CORBA.DCOM.RMI等RPC中间件技术已广泛应用于各个领域.但是面对规模和复杂度越来越高的分布式系统,这些技术也显示出其局限性: 1.同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果才