当前位置:   article > 正文

Spring 与AMQP_spring amqp

spring amqp
一、Spring 与AMQP

1.1 配置Spring支持AMQP消息

使用Spring AMQP前需要配置AMQP的RabbitMQ连接工厂。RabbitMQ是一个流行的开源消息代理,它实现了AMQP。Spring AMQP为RabbitMQ提供了支持,包括RabbitMQ连接工厂、模板以及Spring配置命名空间。

在使用它发送和接收消息之前,你需要预先安装RabbitMQ。我们可以在www.rabbitmq.com/download.html上找到安装指南。根据你所运行的OS不同,这会有所差别,所以根据环境的不同,遵循相应指南进行安装。

配置RabbitMQ连接工厂

配置RabbitMQ连接工厂最简单的方式就是使用Spring AMQP所提供的rabbit配置命名空间。为了使用这项功能,需要确保在Spring配置文件中已经声明了该模式。
在这里插入图片描述

声明队列、Exchange以及binding

元素作用
<queue>创建一个队列
<fanout-exchange>创建一个fanout类型的Exchange
<header-exchange>创建一个header类型的Exchange
<topic-exchange>创建一个topic类型的Exchange
<direct-exchange>创建一个direct类型的Exchange
<bindings>
</bindings>
元素定义一个或多个元素的集合。元素创建Exchange和队列之间的binding

这些配置元素要与<admin>元素一起使用。<admin>元素会创建一个RabbitMQ管理组件(administrative component),它会自动创建(如果它们在RabbitMQ代理中尚未存在的话)上述这些元素所声明的队列、Exchange以及binding。

例如,如果你希望声明名为spittle.alert.queue的队列,只需要在Spring配置中添加如下的两个元素即可:
在这里插入图片描述

1.2 使用RabbitTemplate发送消息

配置RabbitTemplate的最简单方式是使用rabbit命名空间的<template>元素,如下所示:
在这里插入图片描述

使用RabbitTemplate来发送消息

在这里插入图片描述

1.3 接收AMQP消息

使用RabbitTemplate来接收消息

RabbitTemplate提供了多个接收信息的方法。最简单就是receive()方法,它位于消息的消费者端,对应于RabbitTemplate的send()方法。借助receive()方法,我们可以从队列中获取一个Message对象:
在这里插入图片描述
或者,如果愿意的话,你还可以配置获取消息的默认队列,这是通过在配置模板的时候,设置queue属性实现的:
在这里插入图片描述
这样的话,我们在调用receive()方法的时候,不需要设置任何参数就能从默认队列中获取消息了:
在这里插入图片描述
在获取到Message对象之后,我们可能需要将它body属性中的字节数组转换为想要的对象。就像在发送的时候将领域对象转换为Message一样,将接收到的Message转换为领域对象同样非常繁琐。因此,我们可以考虑使用RabbitTemplate的receiveAndConvert()方法作为替代方案:
在这里插入图片描述
我们还可以省略调用参数中的队列名称,这样它就会使用模板的默认队列名称:
在这里插入图片描述
receiveAndConvert()方法会使用与sendAndConvert()方法相同的消息转换器,将Message对象转换为原始的类型。
调用receive()和receiveAndConvert()方法都会立即返回,如果队列中没有等待的消息时,将会得到null。这就需要我们来管理轮询(polling)以及必要的线程,实现队列的监控。

定义消息驱动的AMQP POJO

如果你想在消息驱动POJO中异步地消费使用Spittle对象,首先要解决的问题就是这个POJO本身。如下的SpittleAlertHandler扮演了这个角色:
在这里插入图片描述
我们还需要在Spring应用上下文中将SpittleAlertHandler声明为一个bean:
在这里插入图片描述
还需要声明一个监听器容器和监听器,当消息到达的时候,能够调用SpittleAlertHandler。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/766704
推荐阅读
相关标签
  

闽ICP备14008679号