RabbitMQ-Spring AMQP【翻译】4.1.1 Reference——AMQP Abstraction

版本:2.2.4.RELEASE
地址:官方文档

4.1 使用Spring AMQP

本章主要探索那些使用AMQP进行开发时必不可少的接口和类。

4.1.1 AMQP抽象

Spring AMQP包含了两个模块:spring-amqpspring-rabbitspring-amqp模块包含了org.springframework.amqp.core包。在这个包中,你可以找到代表AMQP核心模型的类。我们打算提供通用的抽象使我们可以不在依赖任何特定的AMQP broker实现或者client lib。用户代码可以更方便的更换具体的实现,因为它依赖于抽象层进行开发。这些抽象然后由特定的broker模块来实现,类如spring-rabbit。…(省略几句没用的)

Message
0-9-1 AMQP 协议并没有定义Message类或者接口,当进行例如basicPublish()操作时,内容作为字节数组参数传递,额外的属性作为单独参数传递。Spring AMQP将消息类定义为更通用的AMQP域模型表示的一部分。Message类的目的是将body和properties封装在一个实体中,从而是API更加简单。下面例子展示了定义:

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接口定义了几个通用的properties,例如messageIdtimestampcontentType。您还可以通过调用setHeader(String key,Object obj)方法,使用用户定义的headers扩展这些属性。

Exchange
这个Exchange接口代表AMQP中的Exchange(消息生产者发送消息到此)。每一个broker中的virtual host的exchange都有唯一的名字和一些属性。

public interface Exchange {

    String getName();

    String getExchangeType();

    boolean isDurable();

    boolean isAutoDelete();

    Map<String, Object> getArguments();

}

如你所见,Exchange还有一个由ExchangeTypes中常量定义的类型。基本的类型包括:direct、topic、fanout和headers。在核心包中,你可以找到每种类型的exchange的具体实现类。这些Exchange类型的行为因其处理队列绑定的方式而异。…(省略具体行为,请看rabbitmq官网)

AMQP规范还要求任何代理都要提供一个“默认”的没有名字的direct exchange。所有被声明的队列都会被绑定到这个默认的exchange并且已他们的名字作为routing key。你可以了解更多关于默认exchange的用法在AmqpTemplate中。

Queue
Queue代表消息消费者从中接收消息的组件。与各种Exchange类一样,我们的实现旨在成为这种核心AMQP类型的抽象表示。

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;

    /**
     * The queue is durable, non-exclusive and non auto-delete.
     *
     * @param name the name of the queue.
     */
    public Queue(String name) {
        this(name, true, false, false);
    }

    // Getters and Setters omitted for brevity

}

注意,构造方法提供了名称。根据实现的不同,admin template可以提供用于生成唯一命名队列的方法。此类队列可用作“回复”地址或其他临时情况。因此,自动生成队列的“exclusive”和“autoDelete”属性都将设置为“true”。

Binding
binding用于连接queue和exchange,它对于通过消息传递连接消费者和生产者十分重要。

new Binding(someQueue, someDirectExchange, "foo.bar");//direct exchange
new Binding(someQueue, someTopicExchange, "foo.*");//topic exchange
new Binding(someQueue, someTopicExchange, "foo.*");//fluent API

Binding类的实例本身只保存有关连接的数据,换言之,她不是一个活动的组件。但是,在后面的Configuring the Broker章节中你将会看到AmqpAdmin类可以使用Binding实例实际触发broker上的绑定动作。此外,正如您在同一节中所看到的,您可以通过在@Configuration类中使用Spring的@Bean注释来定义Binding实例。还有一个方便的基类,它进一步简化了生成AMQP相关bean定义的方法,并识别队列、交换和绑定,以便在应用程序启动时在AMQP代理上声明它们。
AmqpTemplate同样core包内,作为AMQP传递消息最重要的组件之一,更多的细节将会在它独有的章节介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值