RabbitMQ学习

AMQP协议

AMQP(高级消息队列协议)是一个能让符合统一标准的客户端和中间件进行消息传输的消息协议。是RabbitMQ主要实现支持的协议的一种。

涉及到的相关概念的介绍
publisher:发送消息到broker的客户端。
receiver:接受broker发来的消息的客户端。

AMQP消息模型

Publisher发送到broker的消息,首先被发到了broker中的ExchangesExchanges根据被称作bindings的规则,将消息的拷贝发送到对应的queues中,然后broker会将queues中的消息发送到订阅相应queues的consumer。

Exchanges,bindings和queues被统称为amqp的实体

Excange and Exchange Types

pulisher实际是发送消息到broker中的Exchanges,然后Exchanges将消息路由到对应的queues。路由规则是由Exchange type和bindings来决定的。

Exchange Types

Name Default pre-declared names
Direct exchange (Empty string) and amq.direct
Fanout exchange amq.fanout
Topic exchange amq.topic
Headers exchange amq.match (and amq.headers in RabbitMQ)

在声明Exchange时,除了可以指定Exchange Type,还可以指定一些其它的属性:

  • Name
  • Durability (定义Exchange是永久还是临时的,临时性的Exchange在broker重启后就会消失)
  • Auto-delete (定义这个属性后,当没有任何queue和此Exchange绑定时,此Exchange会被自动删除)
  • Arguments (optional, used by plugins and broker-specific features)

Default Exchange

default exchange 是被broker预先声明的name为空的direct exchange。
当使用default exchange 时,我们声明一个名为"xxxxx"的queue,这个queue会以值为"xxxxx"的route-key绑定到default exchange。(即声明的queue会自动以queue name作为routing key绑定)

Direct Exchange

direct exchange根据消息的routing key将消息发送给相应的queue。
direct exchange对用于将任务循环分配给多个worker的场景。消息会被负载均衡到多个consumer,不是负载均衡到多个queue。

自己理解的完整消息转发流程

在exchange type 为direct的情况下,broker会把匹配上routing_key的消息完整的发送给每一个合适的queue里,然后queue会将消息均衡到绑定到器上的


Fanout Exchange

broker会把发送到fanout exchange的消息转发给所有绑定到此exchange的queue,不会去匹配routing key。


Topic Exchange

Headers Exchange

headers exchange 通过消息头部的属性而不是routing_key进行消息路由。


java客户端代码开发示例

主要接口和方法

Exchange 声明

exchangeDeclare(String exchange, BuiltinExchangeType type,boolean durable, boolean autoDelete):声明non-autodelete, non-durable

DIRECT

服务端安装和配置

安装(ubuntu14.04)

直接通过apt repository进行安装

    echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list
    wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
    sudo apt-get update
    sudo apt-get install rabbitmq-server

** 安装相关问题参考地址:http://http://www.rabbitmq.com/install-debian.html **

你可能感兴趣的:(RabbitMQ学习)