上篇讲了使用RabbitMQ发送消息,本篇则来讲接收消息。
在传统JMS中有两种从队列获取信息的方式,使用JmsTemplate的同步方式以及使用消息驱动pojo的异步方式。Spring AMQP也提供了类似的方式来获取通过AMQP发送的消息。
使用RabbitTemplate来接收消息
RabbitTemplate提供的接收信息的方法中最简单的就是receive()方法,通过该方法就可以从队列中获取一个Message对象:
Message message = rabbit.receive("spittle.test.queue");
或者也可以通过配置获取消息的默认队列,这是通过在配置模板的时候,设置queue属性实现的:
<template id="rabbitTemplate"
connection-factory="connectionFactory"
exchange="spittle.test.exchange"
routing-key="spittle.test"
queue="spittle.test.queue" />
这样的话,在调用receive()方法时,不需要设置任何参数就能从默认队列中获取消息:
Message message = rabbit.receive( );
获取到Message对象后,一般需要将它的body属性中的字节数组转换为想要的对象,就像在发送的时候将领域对象转换为Message一样,将接收到的Message转换为领域对象也很繁琐。这里可以考虑使用RabbitTemplate的receiveAndConvert()方法作为替代方案:
Spittle spittle = (Spittle) rabbit.receiveAndConvert("spittle.test.queue");
receiveAndConvert()方法会使用与sendAndConvert()方法相同的消息转换器,将Message对象转换为原始的类型。
调用receive()和receiveAndConvert()方法都会立即返回,如果队列中没有等待的消息,将会得到null。这时一般需要程序员自己管理轮询以及必要的线程,实现队列监控。如果不想每次都同步轮询等待消息到达,可以使用Spring AMQP提供的消息驱动pojo,下面就看看使用消息驱动pojo的方式来接收消息。
使用消息驱动pojo来接收消息
如果想要在消息驱动pojo中异步地消费使用Spittle对象,先要解决这个pojo本身,如下的SpittleTestHandler扮演了这个角色:
public class SpittleTestHandler {
public void handleSpittleTest (Spittle spittle) {
...
}
}
其实这个类并没有依赖于AMQP,不管通过什么机制传递过来Spittle对象,它都能够处理。
这里还需要在Spring应用上下文中将SpittleTestHandler声明为一个bean:
<bean id="spittleListener"
class="com.***.spittr.test.SpittleTestHandler">
最后要声明一个监听器容器和监听器,当消息到达的时候,能够调用SpittleTestHandler,配置如下:
<listener-container connection-factory="connectionFactory">
<listener ref="spittleListener"
method="handleSpittleTest"
queue-names="spittle.test.queue" />
</listener-container>
上面的<listener-container>与<listener>元素都来自rabbit命名空间。并通过queue-names属性来指定要监听的队列,这里只设定了一个要监听的队列,如果要设置多个队列的话,用逗号隔开。到这里消息接收就完成了,拿到消息后就可以在相应方法里执行相应处理了。
分享到:
相关推荐
标题中的“rabbitmq学习10:使用spring-amqp发送消息及异步接收消息”表明了本次讨论的主题,即如何在Spring框架中利用Spring AMQP组件与RabbitMQ进行交互,实现消息的发送和异步接收。RabbitMQ是一个开源的消息代理...
5. **RabbitTemplate**:这是 Spring AMQP 的主要操作接口,提供了一系列的方法来发送和接收消息。它封装了与 RabbitMQ 服务器的交互,包括直接发送、发布/订阅、路由等模式。 6. **消息转换器**:Spring AMQP 提供...
- `RabbitTemplate`:这是Spring AMQP的主要入口点,提供发送和接收消息的方法,简化了与RabbitMQ服务器的交互。 - `Message`和`MessageProperties`:`Message`代表AMQP的消息,`MessageProperties`包含消息的元...
1. **RabbitTemplate**:这是Spring AMQP的核心类,它提供了一种声明式的方式来发送和接收消息。RabbitTemplate简化了与RabbitMQ服务器的交互,包括创建信道、发送和接收消息等操作。 2. **AmqpAdmin**:这是一个...
快速游览(Quick Tour)部分展示了如何使用Spring AMQP发送和接收消息。Spring AMQP通过提供`RabbitTemplate`类来简化消息的发送和接收过程,该类封装了发送消息和接收消息的通用方法。在代码示例中,首先创建了一个...
- 模板机制:Spring AMQP核心的`AmqpTemplate`简化了发送和接收消息的过程。 - 消费者监听:通过`@RabbitListener`注解实现消息消费者,可以监听特定队列并处理消息。 - 异步消息处理:支持异步消息处理,提高...
Spring AMQP 是一个由 Spring Framework 提供的框架,它允许开发者使用 Spring 的编程模型与 RabbitMQ 消息中间件进行交互。RabbitMQ 是一种流行的开源消息代理,它实现了 Advanced Message Queuing Protocol (AMQP)...
3. **RabbitTemplate**:这是Spring AMQP的核心组件,它提供了一组模板方法,简化了发送和接收消息的过程。开发者可以通过RabbitTemplate进行基本的消息操作,如发送消息到指定队列,或者从队列中消费消息。 4. **...
Spring AMQP 允许使用模板方法和回调函数来处理消息的发送和接收。例如,可以提供一个回调函数,当消息发送失败时执行错误处理逻辑。 **7. Spring Boot 集成** Spring Boot 提供了对 Spring AMQP 的开箱即用支持,...
开发者可能会在项目中创建`ConnectionFactory`以连接到RabbitMQ服务器,定义`Queue`和`Exchange`,并使用`RabbitTemplate`或`AmqpAdmin`来发送和接收消息。同时,Spring的`@RabbitListener`注解可能被用来监听特定...
Spring Cloud Config 和 Spring Cloud Bus AMQP 的结合使用为解决这一问题提供了一种优雅的解决方案。让我们深入探讨这两个组件以及它们如何协同工作来实现配置的动态更新。 Spring Cloud Config 是一个用于微服务...
- 参考部分提供了使用Spring AMQP的详细指南,包括AMQP的基础抽象(如消息、交换器、队列、绑定等概念)、连接和资源管理、消息发送和接收的API等。 4. AMQP基础抽象 - 消息(Message):AMQP中的基本数据单位,...
创建消息生产者(Producer)时,Spring提供了一个`RabbitTemplate`类,我们可以使用它来发送消息到指定的交换机(Exchange)。交换机根据预设的路由键(Routing Key)将消息分发到相应的队列(Queue)。队列是消息的...
1. `RabbitTemplate`:这是Spring AMQP的核心工具类,用于发送和接收消息。我们可以使用它来发布股票数据到指定的交换机,并配置交换机的类型(如Direct、Fanout、Topic等)和路由键。 2. `@RabbitListener`:这是...
`RabbitTemplate`是Spring AMQP的核心组件,用于发送和接收消息。你可以通过`@Bean`注解在配置类中创建它: ```java @Bean public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { ...
`RabbitTemplate`是Spring AMQP的核心工具类,它提供了发送和接收消息的便捷方法。 7. **Listener容器**: Spring AMQP提供了两种监听容器,一种是基于SimpleMessageListenerContainer,另一种是基于...
这个项目可能包括配置文件、示例代码以及测试用例,帮助开发者更好地理解和实践Spring AMQP与RabbitMQ的事务和消息确认。 总的来说,理解并掌握Spring AMQP与RabbitMQ的消息确认和外部事务对于构建高可用、高可靠的...
AMQP是一种开放标准的消息协议,它定义了消息生产者、消费者和消息队列之间的交互方式。RabbitMQ是基于AMQP的开源消息代理,广泛应用于分布式系统中的异步任务处理和解耦。 Spring AMQP提供了与RabbitMQ集成的便利...
在Spring Amqp中,`RabbitTemplate`是核心组件,它提供了发送和接收消息的API。你需要配置一个`ConnectionFactory`,这是连接到RabbitMQ服务器的桥梁。`RabbitAdmin`则帮助我们自动管理RabbitMQ中的交换机...