zoukankan      html  css  js  c++  java
  • Spring集成RabbiMQ-Spring AMQP新特性

    上一篇《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的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。

  • 相关阅读:
    highcharts
    iCheck
    MdiContainer
    wms-ssv数据字典
    hibernate 返回自定义对象
    XmlSerialize
    Db
    python groupby
    pom resource配置
    FastReport打印table
  • 原文地址:https://www.cnblogs.com/bigdataZJ/p/springandrabbitmq2.html
Copyright © 2011-2022 走看看