对于大多数应用来说都做了与spring整合,对于rabbitmq来说。也有与spring的整合。可能通过spring的官网找到spring-amqp项目下载。spring-amqp项目包括三个子项目:spring-amqp、spring-erlang、spring-rabbit.
下面来认识一下spring-amqp中的几个重要类;以spring-amqp-1.0.0.M3版本为例
1、Message : Spring AMQP定义的Message类是AMQP域模型中代表之一。Message类封装了body(消息BODY)和properties(消息属性) 。使得这个API看起来很简单。Message类定义如下:
- public class Message {
- private final MessageProperties messageProperties;
- private final byte[] body;
- public Message(byte[] body, MessageProperties messageProperties) {
- this.body = body;
- this.messageProperties = messageProperties;
- }
- public byte[] getBody() {
- return this.body;
- }
- public MessageProperties getMessageProperties() {
- return this.messageProperties;
- }
- }
其中MessageProperties类中定义了例如messageId、timestamp、contentType等属性。这此属性可以扩展到用户通过setHeader(String key, Object value)方法来自定义“headers”。
2、Exchange
Exchange接口代表一个AMQP的Exchange,决定消息生产者发送消息。每个Exchange都包括一个特定的唯一名字的虚拟主机的代理和一些其他属性。
- public interface Exchange {
- String getName();
- String getType();
- boolean isDurable();
- boolean isAutoDelete();
- Map<String, Object> getArguments();
- }
其中 AbstractExchange类实现了Exchange类。而DirectExchange、TopicExchange、FanoutExchang、HeadersExchange四个类继承AbstractExchange。并重写了getType()类。根据各自相对应的Exchange类型。DirectExchange、TopicExchange、FanoutExchang、HeadersExchange分别对应的类型为direct,topic,fanout,headers.对应Exchange与routingkey的判定关系在前面的章节中已学习了!
3、Queue
Queue类是消息消费者接收消息中重要的一个组成部分。通过与Exchange判定来肯定消费者所接收的消息。伪代码如下:
- public class Queue {
- private final String name;
- private volatile boolean durable;
- private volatile boolean exclusive;
- private volatile boolean autoDelete;
- private volatile Map<String, Object> arguments;
- public Queue(String name) {
- this.name = name;
- }
- // Getters and Setters omitted for brevity
其中name表示队列的名称、durable表示持久性。true表示是。exclusive表示独占性。由于在AmqpTemplate中提供一个方法来得到唯一的队列。这个队列可能是一个”reply-to“地址或者其他信息,因此一般exclusive和autoDelete一般设定为true.
4、Binding
Bingding类通过多种构造参数来判定Exchange,Queue,routingkey;例如
- Binding(Queue queue, FanoutExchange exchange)
- Binding(Queue queue, HeadersExchange exchange, Map<String, Object> arguments)
- Binding(Queue queue, DirectExchange exchange)
- Binding(Queue queue, DirectExchange exchange, String routingKey)
- Binding(Queue queue, TopicExchange exchange, String routingKey)
5、AmqpTemplate
AmqpTemplate是用来发送消息的模板类
- public interface AmqpTemplate {
- // send methods for messages
- void send(Message message) throws AmqpException;
- void send(String routingKey, Message message) throws AmqpException;
- void send(String exchange, String routingKey, Message message) throws AmqpException;
- // send methods with conversion
- void convertAndSend(Object message) throws AmqpException;
- void convertAndSend(String routingKey, Object message) throws AmqpException;
- void convertAndSend(String exchange, String routingKey, Object message) throws AmqpException;
- void convertAndSend(Object message, MessagePostProcessor messagePostProcessor) throws AmqpException;
- void convertAndSend(String routingKey, Object message, MessagePostProcessor messagePostProcessor) throws AmqpException;
- void convertAndSend(String exchange, String routingKey, Object message, MessagePostProcessor messagePostProcessor) throws AmqpException;
- // receive methods for messages
- Message receive() throws AmqpException;
- Message receive(String queueName) throws AmqpException;
- // receive methods with conversion
- Object receiveAndConvert() throws AmqpException;
- Object receiveAndConvert(String queueName) throws AmqpException;
- // send and receive methods for messages
- Message sendAndReceive(Message message) throws AmqpException;
- Message sendAndReceive(String routingKey, Message message) throws AmqpException;
- Message sendAndReceive(String exchange, String routingKey, Message message) throws AmqpException;
- // send and receive methods with conversion
- Object convertSendAndReceive(Object message) throws AmqpException;
- Object convertSendAndReceive(String routingKey, Object message) throws AmqpException;
- Object convertSendAndReceive(String exchange, String routingKey, Object message) throws AmqpException;
- }
6、AmqpAdmin和RabbitAdmin
用户配置Queue、Exchange、Binding的代理类。代理类会自动声明或创建这些配置信息。
下面这个类用于异步接收消息的处理类
7、MessageConverter 消息转换器类
8、SimpleMessageListenerContainer 监听消息容器类
相关推荐
标题中的“rabbitmq学习10:使用spring-amqp发送消息及异步接收消息”表明了本次讨论的主题,即如何在Spring框架中利用Spring AMQP组件与RabbitMQ进行交互,实现消息的发送和异步接收。RabbitMQ是一个开源的消息代理...
在本主题"rabbitmq学习11:基于rabbitmq和spring-amqp的远程接口调用"中,我们将深入探讨如何使用RabbitMQ作为消息中间件,结合Spring-AMQP库实现RPC模式。 RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP...
1. **Spring AMQP**: Spring AMQP是Spring框架的一个扩展,它提供了一种抽象层来简化与Advanced Message Queuing Protocol (AMQP)兼容的消息代理(如RabbitMQ)的交互。这个库允许开发者以声明式的方式定义消息的...
Spring AMQP 是一个由 Spring Framework 提供的框架,它允许开发者使用 Spring 的编程模型与 RabbitMQ 消息中间件进行交互。RabbitMQ 是一种流行的开源消息代理,它实现了 Advanced Message Queuing Protocol (AMQP)...
8. **测试和监控**:为了确保配置正确,你可以使用RabbitMQ的管理界面或者Spring Boot Actuator的健康检查端点进行测试和监控。 在`rabbitmq-spring-amqp`压缩包中,可能包含了一个示例项目,该项目展示了如何配置...
总结来说,Spring Cloud Config 和 Spring Cloud Bus AMQP 的组合,借助于RabbitMQ,为我们提供了一个强大的分布式配置管理和动态更新机制。通过这种解决方案,我们可以高效地管理大规模微服务集群的配置,提高系统...
【标题】"spring-amqp-1.2.2.RELEASE.zip" 涉及的知识点主要围绕Spring AMQP框架的1.2.2版本。Spring AMQP是Spring框架的一个扩展,它提供了对Advanced Message Queuing Protocol (AMQP)的支持,AMQP是一种标准的...
接下来,我们关注`spring-amqp-samples`,这是一个快速入门和示例项目,它展示了如何在实际应用中使用Spring AMQP。在源码中,你可以找到如何配置RabbitTemplate、定义消息监听器、创建和使用MessageConverter的实例...
在IT行业中,消息队列(Message Queue)是分布式系统中常用的一种组件,它主要用于解耦应用程序,提高...通过深入学习和实践,你可以熟练掌握RabbitMQ与Spring的整合技巧,为你的项目带来高效、稳定的异步通信能力。
- `RabbitTemplate`:这是Spring AMQP的主要入口点,提供发送和接收消息的方法,简化了与RabbitMQ服务器的交互。 - `Message`和`MessageProperties`:`Message`代表AMQP的消息,`MessageProperties`包含消息的元...
SpringBoot与RabbitMQ结合使用AMQP协议是现代企业级应用程序中常见的消息中间件解决方案。本文将深入探讨SpringBoot如何集成RabbitMQ以及AMQP协议的基础知识,旨在帮助开发者理解和应用这一技术栈。 首先,...
文档《Spring AMQP Reference》提供了使用Spring AMQP进行消息队列操作的全面指导,覆盖了从基本消息交互到高级配置和最佳实践的各个方面,是Spring应用开发者在集成AMQP消息服务时的重要参考。
spring-amqp-java-8 在 Java 8 上运行的示例项目( ) 要求 RabbitMQ 3.4.2 Java 8 Java 7 Maven 3 跑步 确保您正在运行 Java 8 ( java -version ) mvn install java -jar target/spring-amqp-java-8-0.1.0....
Spring AMQP 是 Spring 框架的一个重要组件,专门用于简化 RabbitMQ(一种基于 Advanced Message Queuing Protocol (AMQP) 的开源消息代理)的集成。它提供了一种高级抽象,使得开发者能够更方便地在 Spring 应用...
spring-amqp ./gradlew build 如果在构建过程中遇到内存不足错误,请增加 Gradle 的可用堆和 permgen: GRADLE_OPTS='-XX:MaxPermSize=1024m\n-Xmx1024m' 要构建 jar 并将其安装到本地 Maven 缓存中: ./gradlew ...
8. **创建消费者**:同样在Spring Bean中创建一个类,使用`@RabbitListener`注解来定义监听方法,接收来自特定队列的消息。这个方法将被自动调用,当有新消息到达时。 9. **测试与调试**:启动两个项目,一个是生产...
在这个实例中,我们将探讨如何通过Spring AMQP模块来生产和消费消息,以及如何利用RabbitMQ实现日志系统和JSON数据的对接,并讨论自定义确认消息的重要性。 首先,让我们深入了解Spring AMQP。Spring AMQP是Spring...
这通常通过在`pom.xml`文件中添加Spring AMQP和RabbitMQ的starter依赖来完成,如下所示: ```xml <groupId>org.springframework.boot <artifactId>spring-boot-starter-amqp ``` 接着,配置RabbitMQ连接信息。...