rabbitmq学习8:spring-ampq的重要类认知_chenhaiyang_ok的专栏-程序员宅基地

技术标签: spring  java  RabbitMQ/Spring-AMQP/Qpid  binding  exchange  properties  object  

   对于大多数应用来说都做了与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 监听消息容器类


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chenhaiyang_ok/article/details/8047731

智能推荐

随便推点