近期閱讀了一些網友寫的關于RabbitMq的文章秉扑,整理下來:
消息隊列的初認識:
https://my.oschina.net/u/3229047/blog/839213
http://blog.csdn.net/anzhsoft/article/details/19563091
exchange模式的介紹
http://www.cnblogs.com/zhangweizhong/p/5713874.html
消息隊列的持久化分析
http://backend.blog.163.com/blog/static/20229412620132251132788
AMQP協議中的核心思想就是生產者和消費者隔離,生產者從不直接將消息發(fā)送給隊列恬惯。生產者通常不知道是否一個消息會被發(fā)送到隊列中脆淹,只是將消息發(fā)送到一個交換機瀑踢。先由Exchange來接收鹃操,然后Exchange按照特定的策略轉發(fā)到Queue進行存儲仓坞。同理颜说,消費者也是如此。
RabbitMQ是AMQP的開源實現员舵。
主要涉及的概念:
虛擬主機 virtual host
交換機 exchange
隊列 queue
綁定 binding
路由鍵 routing-key
Connection:就是一個TCP的連接脑沿。Producer和Consumer都是通過TCP連接到RabbitMQ Server的。
Channels:虛擬連接马僻。它建立在上述的TCP連接中。數據流動都是在Channel中進行的注服。也就是說韭邓,一般情況是程序起始建立TCP連接,第二步就是建立這個Channel溶弟。對于Producer或者Consumer來說女淑,一個TCP連接可以并發(fā)的使用多個Channel進行Publish或者Receive。
ack: 確認Message的正確傳遞
RabbitMq中有多個虛擬主機辜御,一個虛擬主機有一組交換機鸭你,隊列和綁定
exchange和queue通過routing-key關聯,這兩者之間的關系是就是binding擒权。路由鍵exchange袱巨,該交換機收到消息后會把消息發(fā)送到指定routing-key的queue中。
有四種類型的Exchanges:
Default Exchange: 這種是特殊的Direct Exchange碳抄,是rabbitmq內部默認的一個交換機愉老。如果 routing key 匹配, 那么Message就會被傳遞到相應的queue中。其實在queue創(chuàng)建時剖效,它會自動的以queue的名字作為routing key來綁定那個exchange嫉入。
Topic Exchange交換機: 對key進行模式匹配,比如ab可以傳遞到所有ab的queue璧尸。
Fanout Exchange交換機: 會向響應的queue廣播咒林。
header Exchange: 少用