赞
踩
一、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。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。