2.基本概念

1. Connection 就是一个TCP的链接。Producer和Consumer都是经过TCP链接到RabbitMQ Server的。tcp

2.信道(channel):性能

why?为何须要信道, 而不是使用tcp链接到mq?spa

全部线程只使用一条TCP链接以知足性能上的需求. 线程启动后, 会在当前的链接上建立一条信道, 也就得到了Rabbitmq上的私密通讯路径, 而不会给操做系统的TCP栈形成额外的负担.操作系统

因此说, channel是创建在上述的TCP链接中。数据流动都是在Channel中进行的。线程

TCP链接就像是光缆, 而信道就像一条条独立的光纤束.3d

TCP链接就像是光缆, 而信道就像一条条独立的光纤束.blog

3.消息路由(AMQP的消息路由有三部分组成:交换器[exchange],绑定[binding],队列[queue])队列

消息发送到交换器, 经过必定的路由规则发送到对应的queue中, 后由监听的consumer消费路由

4.交换器字符串

共有四种类型:direct,topic,fanout,headers.

    A.derect类型:basic_publish($msg,"exchange_name","queue_name");第一个参数是消息内容,第二个参数是交换器,第三个是路由键,就是你申明的queue的名称.交换器若是参数为空, 则会选择空白字符串名称的默认交换器.

    B.fanout类型:当你发送一条msg到fanout类型的交换器上, 它会把消息投递到附加在此交换器上的全部队列.

    C.topic模式:任何发送到Topic Exchange的消息都会被转发到全部关联RouteKey中指定“topic”的队列上上

  1. 这种模式下须要RouteKey,客户端要提早绑定Exchange与Queue。

  2. 若是Exchange没有发现可以与RouteKey匹配的Queue,则会抛弃此消息。

  3. 客户端在进行绑定时,要提供一个该队列“感兴趣”的主题,如“#.log.#”表示该队列关心全部涉及log的消息(一个RouteKey为”MQ.log.error”的消息会被转发到该队列)。

  4. “#”表示0个或若干个关键字,“”表示一个关键字。如“log.”能与“log.warn”匹配,没法与“log.warn.timeout”匹配;可是“log.#”能与上述二者匹配。

相关文章
相关标签/搜索