上一篇《Spring集成RabbitMQ-使用RabbitMQ更方便》中,我们只需要添加响应jar的依赖,就可以写一个Spring集成RabbitMQ下非常简单收发消息的程序。

我们使用的spring-rabbit的版本是当前官方最新的2.0.0.M5,这篇主要介绍下最新版本的spring amqp相对老版本有哪些新特性和升级。

常规改进

ExchangeBuilder在该版本中默认会创建持久化的exchange,就是我们熟悉的durable属性

@QueueBinding注解中用到的@Exchange也默认是开启持久化的

下面这种场景要细化下,在@RabbitListener注解中使用@Queue,如果创建Queue是有名称的,则默认是持久化的,如果创建的是匿名的Queue(你可以认为是《RabbitMQ入门》中通过“String queueName = channel.queueDeclare().getQueue();”这样的方式创建的),则默认是不会持久化的。

不再使用的类

UniquelyNameQueue这个类将不再被提供使用。删除该类主要考虑的是一般不会出现需要创建一个持久化、不会被自动删除,而且队列名称又是唯一的场景。当然了,删除了该类,我们可以使用下面的这种替代方案new Queue(UUID.randomUUID().toString())
****

新增的类

该版本中新添加了一个监听容器类DirectMessageListenerContainer类,相比之前只有一个SimpleMessageListenerContainer,现在又多了个选择。

有关RabbitTemplate的变化

上篇我们简单提过,RabbitTemplate是用来收发消息的。新版本的变动主要有

在之前的版本中,RabbitTemplate是不支持事务的,但是经常被放在事务中,这是一个明显的bug,所以从版本1.6.2开始,如果你确实需要在事务中使用RabbitTemplate,那么就需要多设置一个channelTransacted变量。

新版本的RabbitTemplate现在默认使用DirectReplyToMessageListenerContainer来处理消息响应,而不是像之前那样为每个请求都创建一个消费者进行消费。注意这个DirectReplyToMessageListenerContainer是DirectMessageListenerContainer的子类。

RabbitTemplate和AsyncRabbitTemplate中的方法receiveAndConvert和convertSendAndReceiveAsType,能够通过设置参数ParameterizedTypeReference来指定返回结果的类型。是不是很灵活、很方便?

监听容器的微小变化

在之前的版本中,当调用方法basicGet比如RabbitMQ.receive()是,我们会通过MessageProperties.getMessageCount()来获取消息数目,如果没有消息的话就是0,在新版本中则返回为null
****

有关重试

MissingMessageIdAdvice这个类已经不再对外提供,转为内置了。

匿名队列的命名

AnonymousQueues现在默认的命名策略由原来的使用UUID改为Base64UrlNamingStrategy。

所有的改变都是为了更好!

如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!如果您想持续关注我的文章,请扫描二维码,关注JackieZheng的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。

Spring集成RabbiMQ-Spring AMQP新特性的更多相关文章

  1. Redis篇之操作、lettuce客户端、Spring集成以及Spring Boot配置

    Redis篇之操作.lettuce客户端.Spring集成以及Spring Boot配置 目录 一.Redis简介 1.1 数据结构的操作 1.2 重要概念分析 二.Redis客户端 2.1 简介 2 ...

  2. Spring Framework 5 中的新特性

    https://www.ibm.com/developerworks/cn/java/j-whats-new-in-spring-framework-5-theedom/index.html Spri ...

  3. Spring Boot 2.3.0 新特性Redis 拓扑动态感应

    本文为原创文章.欢迎任何形式的转载,但请务必注明出处 冷冷https://lltx.github.io. Spring Boot 2.3 新特性优雅停机详解 Spring Boot 2.3 新特性分层 ...

  4. 一键式Spring集成工具 Spring Boot

    最近公司使用Spring boot进行开发,稍微了解一下,不过自我感觉把集中式配置applicate.properties搞明白,注解用过Spring MVC的boot绝对没问题的 比如拦截器:@As ...

  5. Spring Boot 2.2.0新特性

    Spring Boot 2.2.0 正式发布了,可从 repo.spring.io 或是 Maven Central 获取. 性能提升   Spring Boot 2.2.0 的性能获得了很大的提升. ...

  6. Spring4.1新特性——Spring缓存框架增强(转)

    目录 Spring4.1新特性——综述 Spring4.1新特性——Spring核心部分及其他 Spring4.1新特性——Spring缓存框架增强 Spring4.1新特性——异步调用和事件机制的异 ...

  7. Spring4.1新特性——Spring MVC增强

    目录 Spring4.1新特性——综述 Spring4.1新特性——Spring核心部分及其他 Spring4.1新特性——Spring缓存框架增强 Spring4.1新特性——异步调用和事件机制的异 ...

  8. Spring Boot 2.0 新特性

    这是一篇总结文章,主要收集 Spring Boot 2.0 相对于 Spring Boot 1.x 的新特性,本章节并不提供实践性质的源代码.在 Spring Boot 系列文章中会持续退出实践章节. ...

  9. Spring Boot 2.3.0正式发布:优雅停机、配置文件位置通配符新特性一览

    当大潮退去,才知道谁在裸泳..关注公众号[BAT的乌托邦]开启专栏式学习,拒绝浅尝辄止.本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈.MyBatis. ...

随机推荐

  1. PKM你的知识需要管理

    有一段时间没有更新技术博客了~,大脑中总感觉有点东西要写,却不知道从哪里开始写~至少写点东西,也算是一个阶段的成长 学习(充电过程).工作(知识变现过程)不是简单重复,永远都是最值得去反思.玩味的事儿 ...

  2. C#将datatable的某一列转换成json格式的字符串

    将datatable的某一列转换成json格式的字符串(转换完后自己在字符串前后加{}) /// <summary> ///DataTable装换 Column数据 组合成json 现在的 ...

  3. JavaScript一个cookie存储的类

    所有输出都在浏览器的控制台中 <script type="text/javascript"> /** * cookieStorage.js * 本类实现像localSt ...

  4. 剥析surging的架构思想

    1.前言   前面第一篇阐述了采用基于.NET CORE微服务架构,应用surging服务端与客户端之间进行通信的简单示例以及对于surging服务化框架简单介绍.在这篇文章中,我们将剥析surgin ...

  5. 关于locals()、globals()以及作用域的一些感悟

    示例代码 i=6def foo(): print locals() print globals() i=66 print locals() print globals()class demo: i=6 ...

  6. hdu_5964:平行四边形

    打重现赛时,一点思路也没有,然后又看到这题AC数那么少,就直接放弃了.今天重新看了看,借鉴了下别人的,发现此题应该算是一道可解题. 看上去,这题的ans是同时有两个点作为自变量的函数(然而n^2复杂度 ...

  7. Windows远程linux服务器执行shell命令

    一.前言 借用百度百科关于putty的描述:PuTTY是一个Telnet.SSH.rlogin.纯TCP以及串行接口连接软件.较早的版本仅支持Windows平台,在最近的版本中开始支持各类Unix平台 ...

  8. 2017年7月Web服务器调查报告

    在2017年7月的调查中,我们收到了来自1,767,964,429个网站和6,593,508个面向web的计算机的反馈.这是一个小小的进步,网站的数量增加了100万个(+0.06%),面向web的计算 ...

  9. (转)eclipse安装jetty

    背景:在项目开发的过程中,一个老的项目使用的是jetty启动,在用tomcat启动的过程中出现了启动不了的异常,浪费了好多时间.因为项目一直是用jetty启动的,为了不浪费时间,也只好改变思路选择je ...

  10. ORACLE - 用户和角色的权限管理

    在ORACLE中,创建用户后需要授权才能使用. 一.用户管理 1. 用户和角色信息查询 --查询所有用户 SQL> select * from dba_users; --经授予的用户或角色的系统 ...