rabbitmq学习8:spring-ampq的重要类认知

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值