这里单独列出来我也是觉得有点必要的,毕竟JMS总体知识点并不多,这点可能被很多人所忽视.
首选定义:消息的确认是指消息接受者接到消息,并做出了对应的处理之后,它将回送一个确认消息.
对于非事务性会话,创建会话时应该指定确定方式,JMS定义了3种确认方式:
| JMS确认3种方式 |
| Auto_ACKnowledge |
自动通知. 对于同步消费者,Receive方法调用返回,且没有异常发生时,将自动对收到的消息予以确认. 对于异步消息,当onMessage方法返回,且没有异常发生时,即对收到的消息自动确认.
|
| Client_AcKnowledge |
客户端自行决定通知时机
这种方式要求客户端使用javax.jms.Message.acknowledge()方法完成确认.
|
| Dups_OK_ACKnowledge |
延时//批量通知
这种确认方式允许JMS不必急于确认收到的消息,允许在收到多个消息之后一次完成确认,与Auto_AcKnowledge相比,这种确认方式在某些情况下可能更有效,因为没有确认,当系统崩溃或者网络出现故障的时候,消息可以被重新传递.
|
二:JMS连接创建JMS会话的代码:
想回看下这段代码:
02 |
* @description 下面是要从服务器上获取连接工厂的JNDI和队列地址的JNDI. 然后就是发送信息到服务器端. |
04 |
* @param cfJNDI 连接工厂的JNDI |
05 |
* @param queueJNDI 队列的JNDI |
07 |
* @throws JMSException |
08 |
* @throws NamingException |
10 |
private boolean getConnectFactory(String msg, String cfJNDI, String queueJNDI) throws JMSException, NamingException { |
11 |
Connection connection = null; |
12 |
MessageProducer producer = null; |
15 |
InitialContext ic = new InitialContext(); |
16 |
//JMS客户端使用JNDI 查找,定位 连接工厂 |
17 |
ConnectionFactory connectionFactory = (ConnectionFactory) ic.lookup(cfJNDI); |
18 |
//PTP模式,使用Queue.JMS客户端使用JNDI 查找,定位 Queue. |
19 |
Queue queue = (Queue) ic.lookup(queueJNDI); |
21 |
connection = connectionFactory.createConnection(); |
22 |
//通过JMS连接,获取到 JMS会话.后面的参数下章或下下章讲解. |
23 |
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); |
24 |
//在JMS会话中,创建一个 JMS消息生产者. |
25 |
producer = session.createProducer(queue); |
27 |
TextMessage message = session.createTextMessage(); |
30 |
producer.send(message); |
32 |
this.close(connection, producer); |
33 |
} catch (JMSException e) { |
34 |
this.close(connection, producer); |
35 |
throw new JMSException(e.getMessage()); |
36 |
} catch (NamingException e) { |
37 |
this.close(connection, producer); |
38 |
throw new NamingException(e.getMessage()); |
43 |
private void close(Connection connection, MessageProducer producer) throws JMSException { |
45 |
if (null != producer) { |
48 |
if (null != connection) { |
51 |
} catch (JMSException e) { |
52 |
throw new JMSException(e.getMessage()); |
1 |
//通过JMS连接,获取到 JMS会话.后面的参数下章或下下章讲解. |
2 |
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); |
上面这句是重点,这段代码是创建Session时调用了Connection的方法,第一个false参数,是表明会话是否具有事务性.如果是false,必须指定确认方式.
- Java微信公众平台开发(三)--接收消息的分类及实体的创建
转自:http://www.cuiyongzhi.com/post/41.html 前面一篇有说道应用服务器和腾讯服务器是通过消息进行通讯的,并简单介绍了微信端post的消息类型,这里我们将建立消息实 ...
- Spring整合JMS(二)——三种消息监听器
原文地址:http://haohaoxuexi.iteye.com/blog/1893676 1.3 消息监听器MessageListener 在Spring整合JMS的应用中我们在定义消息监 ...
- Spring整合JMS(二)——三种消息监听器(转)
*注:别人那复制来的 1.3 消息监听器MessageListener 在Spring整合JMS的应用中我们在定义消息监听器的时候一共可以定义三种类型的消息监听器,分别是MessageList ...
- spring与activemq(三种消息监听方式)
1.3 消息监听器MessageListener 在Spring整合JMS的应用中我们在定义消息监听器的时候一共可以定义三种类型的消息监听器,分别是MessageListener.Sessio ...
- SpringBoot 整合 RabbitMQ(包含三种消息确认机制以及消费端限流)
目录 说明 生产端 消费端 说明 本文 SpringBoot 与 RabbitMQ 进行整合的时候,包含了三种消息的确认模式,如果查询详细的确认模式设置,请阅读:RabbitMQ的三种消息确认模式 同 ...
- JMS学习三(ActiveMQ消息的可靠性)
下面我们来学习一下消息接受确认和发送持久化消息.消息的过期.消息的选择器和消息的优先级. 一.消息接收确认 1.jms消息只有在被确认之后才认为成功消费了这条消息.消息的成功消费通常包括三个步骤:(1 ...
- JMS开发步骤和持久化/非持久化Topic消息
------------------------------------------------ 开发一个JMS的基本步骤如下: 1.创建一个JMS connection factory 2.通过co ...
- 学习ActiveMQ(六):JMS消息的确认与重发机制
当我们发送消息的时候,会出现发送失败的情况,此时我们需要用到activemq为我们提供了消息重发机制,进行消息的重新发送.那么我们怎么知道消息有没有发送失败呢?activemq还有消息确认机制,消费者 ...
- 深入浅出 JMS(三) - ActiveMQ 消息传输
深入浅出 JMS(三) - ActiveMQ 消息传输 一.消息协商器(Message Broker) broke:消息的交换器,就是对消息进行管理的容器.ActiveMQ 可以创建多个 Broker ...
随机推荐
- 【笨嘴拙舌WINDOWS】编码历史
在介绍历史之前,有必要将一个经常使用的词语"标准"解释一下: " 标准是"为了在一定的范围内获得最佳秩序,经协商一致制定并由公认机构批准,共同使用的和重复使用的 ...
- LinQ综合应用实例
直接上代码,内容很浅显易懂,在这里就不做更多的解释,解释见代码注释. using System; using System.Collections.Generic; using System.Linq ...
- SQL SERVER 2008筛选时报错 无法为该请求检索数据
使用SqlServer2008的筛选功能时报错“无法为该请求检索数据. (Microsoft.SqlServer.Management.Sdk.Sfc)” 如下图: 解决方法: 打上SQL SERVE ...
- SDOI 2010 and SXOI 2014 地精部落 (递推)
用E[i,j]表示共有i个数字,以1..j开头且一开始下降的方案数的总和.则我们有: E[i,j]:=E[I,J-1]+E[i-1,i-j] 我们先来证明上升与下降的方案是一一对应的. 事实上,若有a ...
- codeforces 340C Tourist Problem(简单数学题)
题意:固定起点是0,给出一个序列表示n个点,所有点都在一条直线上,其中每个元素代表了从起点到这个点所走的距离.已知路过某个点不算到达这个点,则从起点出发,到达所有点的方案有许多种.求所有方案走的总路程 ...
- apache开源项目 -- tajo
一.体系架构 Tajo采用了Master-Worker架构(下图虚线框目前还在计划中),Master-Worker-Client之间的RPC通信是使用Protocol buffer + Netty来实 ...
- IP网络5种基本寻址方式 (单播、多播、广播、任播、地域多播)
Addressing methods The Internet Protocol and other network addressing systems recognize five main ad ...
- MYSQL内存
全局内存(BASE MEMORY) 线程内存(MEMORY PER CONNECTION) max_conecctions:整个 MySQL 允许的最大连接数; max_user_connection ...
- POJ 1080 Human Gene Functions
题意:给两个DNA序列,在这两个DNA序列中插入若干个'-',使两段序列长度相等,对应位置的两个符号的得分规则给出,求最高得分. 解法:dp.dp[i][j]表示第一个字符串s1的前i个字符和第二个字 ...
- Delphi 操作word 表格
var wordApp, WordDoc, WrdSelection, wrdtable: variant; strAdd: string; wdPar,wdRange:OleVariant; iCo ...