概述


这是关于JmsTemplate的最后一篇总结,且只会介绍几个比较重要的特性。

消息的递送模式


在发送消息给时,可以告知这是持久化的消息,还是非持久化的消息。如果是非持久化的消息,broker会将消息保留在内存,否则就会持久化到磁盘。非持久化:高吞吐,易丢失;持久化:低吞吐,不易丢失。
相关的API:
Class org.springframework.jms.core.JmsTemplate
  • public void setDeliveryMode(int deliveryMode)
    设置是否持久化要发送的消息:1-非持久化;2-持久化
  • public int getDeliveryMode()
    获取持久化模式的设置:1-非持久化;2-持久化
  • public void setDeliveryPersistent(boolean deliveryPersistent)
    设置是否持久化要发送的消息,true-持久化;false-非持久化

消息的优先级


在发送时,可以为消息指定优先级,以期高优先级的消息能更快的递送给consumer。在javax.jms.Message#getJMSPriority()方法,有如下的说明:
JMS API为消息定义了10个优先级,0最低,9最高。0-4作为一般的优先级,5-9作为加速优先级。JMS API不要求实现者能够严格按照消息的优先级的顺序把消息递送给consumer,但是应该尽量的实现加速优先级的消息能在一般优先级的消息的前面,递送给consumer。
下面是JmsTemplate中的API:
Class org.springframework.jms.core.JmsTemplate
  • public void setPriority(int priority)
    为将要发送的消息设置优先级。
  • public int getPriority()
    获取优先级

消息的存活时间


在发送时,可以设置消息的存活时间,默认为永久有效。
Class org.springframework.jms.core.JmsTemplate
  • public void setTimeToLive(long timeToLive)
    设置消息的存活时间,毫秒单位
  • public long getTimeToLive()
    获取消息的存活时间,毫秒单位

服务质量开关


如果不打开服务质量的开关,消息的递送模式、优先级和存活时间的设置就没有作用。
Class org.springframework.jms.core.JmsTemplate
  • public void setExplicitQosEnabled(boolean explicitQosEnabled)
    发送消息的时候,是否使用QOS的值(deliveryMode, priority, timeToLive)
  • public boolean isExplicitQosEnabled()
    如果是true,deliveryMode, priority, 和 timeToLive的值将被使用;否则使用默认的值。

P.S.

在JMS API中,消息的递送模式、优先级和存活时间可以在发送的时候统一设置:
  • javax.jms.MessageProducer#send(Message message, int deliveryMode, int priority, long timeToLive):void

接收等待时间


JmsTemplate的接收是阻塞式的接收,默认会一直阻塞等待,直到接收到了消息。也可以设置一个最长的等待时间参数,超过这个时间,接收的方法将得到null的结果。
Class org.springframework.jms.core.JmsTemplate
  • public void setReceiveTimeout(long receiveTimeout)
    设置接收等待时间,毫秒单位
  • public long getReceiveTimeout()
    获取接收等待时间,毫秒单位

AMQ学习笔记 - 12. Spring-JmsTemplate特性设置的更多相关文章

  1. Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点

    Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/ ...

  2. Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建

    Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...

  3. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  4. Spring学习1:Spring基本特性

    http://longliqiang88.github.io/2015/08/14/Spring%E5%AD%A6%E4%B9%A01%EF%BC%9ASpring%E5%9F%BA%E6%9C%AC ...

  5. SQL反模式学习笔记12 存储图片或其他多媒体大文件

    目标:存储图片或其他多媒体大文件 反模式:图片存储在数据库外的文件系统中,数据库表中存储文件的对应的路径和名称. 缺点:     1.文件不支持Delete操作.使用SQL语句删除一条记录时,对应的文 ...

  6. Spring实战第八章学习笔记————使用Spring Web Flow

    Spring实战第八章学习笔记----使用Spring Web Flow Spring Web Flow是一个Web框架,它适用于元素按规定流程运行的程序. 其实我们可以使用任何WEB框架写流程化的应 ...

  7. Spring实战第五章学习笔记————构建Spring Web应用程序

    Spring实战第五章学习笔记----构建Spring Web应用程序 Spring MVC基于模型-视图-控制器(Model-View-Controller)模式实现,它能够构建像Spring框架那 ...

  8. matlab学习笔记12单元数组和元胞数组 cell,celldisp,iscell,isa,deal,cellfun,num2cell,size

    一起来学matlab-matlab学习笔记12 12_1 单元数组和元胞数组 cell array --cell,celldisp,iscell,isa,deal,cellfun,num2cell,s ...

  9. SpringMVC:学习笔记(12)——ThreadLocal实现会话共享

    SpringMVC:学习笔记(12)——ThreadLocal实现会话共享 ThreadLocal ThreadLocal,被称为线程局部变量.在并发编程的情况下,使用ThreadLocal创建的变量 ...

随机推荐

  1. ueditor 编辑器再thinkphp中使用 解决转义问题

    在前台common.php文件中加入下面的函数就可以解决了 <?php //取消thinkphp里面的转义 if (get_magic_quotes_gpc()) { function stri ...

  2. 如何利用PhoneGap制作地图APP

    摘要:百度地图API是一套由javascript编写的地图程序接口,按说它应该运行在浏览器上.现在,只要利用PhoneGap,我们就能开发出移动平台上能使用的APP了! --------------- ...

  3. 怎样通过Java程序提交yarn的mapreduce计算任务

    因为项目需求,须要通过Java程序提交Yarn的MapReduce的计算任务.与一般的通过Jar包提交MapReduce任务不同,通过程序提交MapReduce任务须要有点小变动.详见下面代码. 下面 ...

  4. 使用javaScript解决asp.net中mvc使用ajax提交数组参数的匹配问题

    想到在asp.net的mvc中如果使用ajax向服务端传递参数时如果参数是一个类或者是个数组(或List集合)以及更复杂的对象时,服务端总是会发生取不到值的情况,当然网上也有很多解决的例子,但都是在服 ...

  5. SQL Sever 2008 数据库文件的备份和还原

    数据库文件备份保存的方式我知道的有两种,第一种就是我们知道到的简单的分离,生成.mdf和.ldf文件,然后使用的时候直接进行附加数据库就可以了. 那么还有生成备份的文件.bak 的,这个操作要在步骤: ...

  6. C#中的预处理器指令详解

    这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...

  7. easyui datagrid 列拖拽

    首先easyui 它有提供了拖拽的功能Draggable,那我们就可以想 拖拽标题头到另外的标题头上面我们就对datagrid的columns重新绑定一次 并刷新datagrid这个功能不就行了? & ...

  8. swift3.0基础语法

    swift 3.0 基础语法 目录 01-变量和常量 02-运算符 03-可选项 04-条件语句 05-循环 06-字符串 07-元组 08-数组 09-字典 10-对象和类 11-枚举 12-属性 ...

  9. Android 使用 HTTP 协议访问网络

    正在看<第一行代码>,记录一下使用 HTTP 协议访问网络的内容吧! 在Android发送Http请求有两种方式,HttpURLConnection和HttpClient. 1.使用Htt ...

  10. c#几个小例子引发的思考

    楚广明老师的c#教程每一节都会给出几个小例子让大家联系,对于初学者来说这确实是一件很纠结的事情,下面我把这几个小例子简单的写一下.同时看一下我们学到了什么 1.面向过程版的圆周长面积计算 using ...