`
yimeng528
  • 浏览: 189299 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

rabbitmq学习8:spring-amqp的重要类的认识

阅读更多

对于大多数应用来说都做了与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类定义如下:

Java代码  收藏代码
  1. public class Message {  
  2.   
  3.     private final MessageProperties messageProperties;  
  4.   
  5.     private final byte[] body;  
  6.   
  7.   
  8.     public Message(byte[] body, MessageProperties messageProperties) {  
  9.         this.body = body;  
  10.         this.messageProperties = messageProperties;  
  11.     }  
  12.   
  13.   
  14.     public byte[] getBody() {  
  15.         return this.body;  
  16.     }  
  17.   
  18.     public MessageProperties getMessageProperties() {  
  19.         return this.messageProperties;  
  20.     }  
  21.   
  22.   
  23.     }  

 

   其中MessageProperties类中定义了例如messageId、timestamp、contentType等属性。这此属性可以扩展到用户通过setHeader(String key, Object value)方法来自定义“headers”。

 2、Exchange

      Exchange接口代表一个AMQP的Exchange,决定消息生产者发送消息。每个Exchange都包括一个特定的唯一名字的虚拟主机的代理和一些其他属性。

 

Java代码  收藏代码
  1. public interface Exchange {  
  2.   
  3.     String getName();  
  4.   
  5.     String getType();  
  6.   
  7.     boolean isDurable();  
  8.   
  9.     boolean isAutoDelete();  
  10.   
  11.     Map<String, Object> getArguments();  
  12.   
  13. }  

 

 其中 AbstractExchange类实现了Exchange类。而DirectExchange、TopicExchange、FanoutExchang、HeadersExchange四个类继承AbstractExchange。并重写了getType()类。根据各自相对应的Exchange类型。DirectExchange、TopicExchange、FanoutExchang、HeadersExchange分别对应的类型为direct,topic,fanout,headers.对应Exchange与routingkey的判定关系在前面的章节中已学习了!

 3、Queue

 Queue类是消息消费者接收消息中重要的一个组成部分。通过与Exchange判定来肯定消费者所接收的消息。伪代码如下:

Java代码  收藏代码
  1. public class Queue {  
  2. private final String name;  
  3. private volatile boolean durable;  
  4. private volatile boolean exclusive;  
  5. private volatile boolean autoDelete;  
  6. private volatile Map<String, Object> arguments;  
  7. public Queue(String name) {  
  8. this.name = name;  
  9. }  
  10. // Getters and Setters omitted for brevity  

 

其中name表示队列的名称、durable表示持久性。true表示是。exclusive表示独占性。由于在AmqpTemplate中提供一个方法来得到唯一的队列。这个队列可能是一个”reply-to“地址或者其他信息,因此一般exclusive和autoDelete一般设定为true.

4、Binding

     Bingding类通过多种构造参数来判定Exchange,Queue,routingkey;例如

 

Java代码  收藏代码
  1. Binding(Queue queue, FanoutExchange exchange)  

 

Java代码  收藏代码
  1. Binding(Queue queue, HeadersExchange exchange, Map<String, Object> arguments)  
Java代码  收藏代码
  1. Binding(Queue queue, DirectExchange exchange)  
Java代码  收藏代码
  1. Binding(Queue queue, DirectExchange exchange, String routingKey)   
Java代码  收藏代码
  1. Binding(Queue queue, TopicExchange exchange, String routingKey)  

 

5、AmqpTemplate

AmqpTemplate是用来发送消息的模板类

Java代码  收藏代码
  1. public interface AmqpTemplate {  
  2.   
  3.     // send methods for messages  
  4.   
  5.     void send(Message message) throws AmqpException;  
  6.   
  7.     void send(String routingKey, Message message) throws AmqpException;  
  8.   
  9.     void send(String exchange, String routingKey, Message message) throws AmqpException;  
  10.   
  11.     // send methods with conversion  
  12.   
  13.     void convertAndSend(Object message) throws AmqpException;  
  14.   
  15.     void convertAndSend(String routingKey, Object message) throws AmqpException;  
  16.   
  17.     void convertAndSend(String exchange, String routingKey, Object message) throws AmqpException;  
  18.   
  19.     void convertAndSend(Object message, MessagePostProcessor messagePostProcessor) throws AmqpException;  
  20.   
  21.     void convertAndSend(String routingKey, Object message, MessagePostProcessor messagePostProcessor) throws AmqpException;  
  22.   
  23.     void convertAndSend(String exchange, String routingKey, Object message, MessagePostProcessor messagePostProcessor) throws AmqpException;  
  24.   
  25.     // receive methods for messages  
  26.   
  27.     Message receive() throws AmqpException;  
  28.   
  29.     Message receive(String queueName) throws AmqpException;  
  30.   
  31.     // receive methods with conversion  
  32.   
  33.     Object receiveAndConvert() throws AmqpException;  
  34.   
  35.     Object receiveAndConvert(String queueName) throws AmqpException;  
  36.   
  37.     // send and receive methods for messages  
  38.   
  39.     Message sendAndReceive(Message message) throws AmqpException;  
  40.   
  41.     Message sendAndReceive(String routingKey, Message message) throws AmqpException;  
  42.   
  43.     Message sendAndReceive(String exchange, String routingKey, Message message) throws AmqpException;  
  44.   
  45.     // send and receive methods with conversion  
  46.   
  47.     Object convertSendAndReceive(Object message) throws AmqpException;  
  48.   
  49.     Object convertSendAndReceive(String routingKey, Object message) throws AmqpException;  
  50.   
  51.     Object convertSendAndReceive(String exchange, String routingKey, Object message) throws AmqpException;  
  52.   
  53. }  

 6、AmqpAdmin和RabbitAdmin

   用户配置Queue、Exchange、Binding的代理类。代理类会自动声明或创建这些配置信息。

下面这个类用于异步接收消息的处理类

   7、MessageConverter 消息转换器类

 8、SimpleMessageListenerContainer 监听消息容器类

分享到:
评论

相关推荐

    rabbitmq学习10:使用spring-amqp发送消息及异步接收消息

    标题中的“rabbitmq学习10:使用spring-amqp发送消息及异步接收消息”表明了本次讨论的主题,即如何在Spring框架中利用Spring AMQP组件与RabbitMQ进行交互,实现消息的发送和异步接收。RabbitMQ是一个开源的消息代理...

    rabbitmq学习11:基于rabbitmq和spring-amqp的远程接口调用

    在本主题"rabbitmq学习11:基于rabbitmq和spring-amqp的远程接口调用"中,我们将深入探讨如何使用RabbitMQ作为消息中间件,结合Spring-AMQP库实现RPC模式。 RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP...

    spring-amqp,spring-retry,spring-rabbit

    1. **Spring AMQP**: Spring AMQP是Spring框架的一个扩展,它提供了一种抽象层来简化与Advanced Message Queuing Protocol (AMQP)兼容的消息代理(如RabbitMQ)的交互。这个库允许开发者以声明式的方式定义消息的...

    spring-amqp 相关jar

    Spring AMQP 是一个由 Spring Framework 提供的框架,它允许开发者使用 Spring 的编程模型与 RabbitMQ 消息中间件进行交互。RabbitMQ 是一种流行的开源消息代理,它实现了 Advanced Message Queuing Protocol (AMQP)...

    rabbitmq 路由spring-amqp实现

    8. **测试和监控**:为了确保配置正确,你可以使用RabbitMQ的管理界面或者Spring Boot Actuator的健康检查端点进行测试和监控。 在`rabbitmq-spring-amqp`压缩包中,可能包含了一个示例项目,该项目展示了如何配置...

    spring-cloud-config + spring-cloud-bus-amqp实现分布式集群配置动态更新

    总结来说,Spring Cloud Config 和 Spring Cloud Bus AMQP 的组合,借助于RabbitMQ,为我们提供了一个强大的分布式配置管理和动态更新机制。通过这种解决方案,我们可以高效地管理大规模微服务集群的配置,提高系统...

    spring-amqp-1.2.2.RELEASE.zip

    【标题】"spring-amqp-1.2.2.RELEASE.zip" 涉及的知识点主要围绕Spring AMQP框架的1.2.2版本。Spring AMQP是Spring框架的一个扩展,它提供了对Advanced Message Queuing Protocol (AMQP)的支持,AMQP是一种标准的...

    spring-amqp 1.5.3源码

    接下来,我们关注`spring-amqp-samples`,这是一个快速入门和示例项目,它展示了如何在实际应用中使用Spring AMQP。在源码中,你可以找到如何配置RabbitTemplate、定义消息监听器、创建和使用MessageConverter的实例...

    RabbitMq与Spring整合实例

    在IT行业中,消息队列(Message Queue)是分布式系统中常用的一种组件,它主要用于解耦应用程序,提高...通过深入学习和实践,你可以熟练掌握RabbitMQ与Spring的整合技巧,为你的项目带来高效、稳定的异步通信能力。

    spring-amqp文档.zip

    - `RabbitTemplate`:这是Spring AMQP的主要入口点,提供发送和接收消息的方法,简化了与RabbitMQ服务器的交互。 - `Message`和`MessageProperties`:`Message`代表AMQP的消息,`MessageProperties`包含消息的元...

    springboot-rabbitmq-amqp

    SpringBoot与RabbitMQ结合使用AMQP协议是现代企业级应用程序中常见的消息中间件解决方案。本文将深入探讨SpringBoot如何集成RabbitMQ以及AMQP协议的基础知识,旨在帮助开发者理解和应用这一技术栈。 首先,...

    spring-amqp-reference.pdf

    文档《Spring AMQP Reference》提供了使用Spring AMQP进行消息队列操作的全面指导,覆盖了从基本消息交互到高级配置和最佳实践的各个方面,是Spring应用开发者在集成AMQP消息服务时的重要参考。

    spring-amqp-java-8:在 Java 8 上运行的示例项目

    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 AMQP 是 Spring 框架的一个重要组件,专门用于简化 RabbitMQ(一种基于 Advanced Message Queuing Protocol (AMQP) 的开源消息代理)的集成。它提供了一种高级抽象,使得开发者能够更方便地在 Spring 应用...

    java源码无lib文件夹-spring-amqp:SpringAMQP-使用AMQP支持Spring编程模型,特别是但不限于RabbitMQ

    spring-amqp ./gradlew build 如果在构建过程中遇到内存不足错误,请增加 Gradle 的可用堆和 permgen: GRADLE_OPTS='-XX:MaxPermSize=1024m\n-Xmx1024m' 要构建 jar 并将其安装到本地 Maven 缓存中: ./gradlew ...

    rabbitmq和spring集成

    8. **创建消费者**:同样在Spring Bean中创建一个类,使用`@RabbitListener`注解来定义监听方法,接收来自特定队列的消息。这个方法将被自动调用,当有新消息到达时。 9. **测试与调试**:启动两个项目,一个是生产...

    spring-amqp.zip

    在这个实例中,我们将探讨如何通过Spring AMQP模块来生产和消费消息,以及如何利用RabbitMQ实现日志系统和JSON数据的对接,并讨论自定义确认消息的重要性。 首先,让我们深入了解Spring AMQP。Spring AMQP是Spring...

    spring-boot-mq-rabbitmq 一套打通rabbitmq 打开可用 有注释

    这通常通过在`pom.xml`文件中添加Spring AMQP和RabbitMQ的starter依赖来完成,如下所示: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-amqp ``` 接着,配置RabbitMQ连接信息。...

Global site tag (gtag.js) - Google Analytics