Rabbitmq 基本介紹
RabbitMQ是基本實現了趕集消息隊列協議(AMQP)的開源消息代理軟件(也稱作面向消息的中間件),RabbitMQ服務器是用 Erlang語言編寫的
RabitMQ官方網站:
6種工作模式:
1,點對點(簡單)的隊列;
2,工作(公平性)隊列;
3,發佈式訂閱模式;
4,路由模式Routing;
5,通配符模式;Topics;
6,RPC
Rabitmq 管理平臺中心
Rabbitmq 管理平臺地址爲: http://127.0.0.1:15672
默認賬號: guest/guest 用戶可以自己創建賬號
Virtual Hosts
像mysql 有數據庫的概念並且可以指定用戶對庫和表等操作的權限,Rabbitmq也有類似的權限管理。在RabbitMQ 中可以虛擬消息服務器VirtualHost,每個VirtualHost 相當一個獨立的RabbitMQ服務器。每個VirtualHost之間是相互隔離的。exchange.queue.message 不能互通。
默認的端口15672:rabbitmq管理平臺端口號
默認的端口5672: rabbitmq消息中間內部通訊的端口
默認的端口號25672 rabbitmq集羣的端口號
Rabbitmq常見名詞:
/Virtual Hosts --分類:
/隊列 存放我們的消息
Exchange 分派我們消息在那個隊列存放起來 類似於nginx
15672---rabbitmq控制檯管理平臺 http協議
25672rabbitmq 集羣通信端口號
Amqp 5672 rabbitmq內部通信的一個端口號
快速入門RabbitMQ 簡單隊列;
首先需要在RabbitMQ平臺創建Virtual Hosts 和隊列
--訂單隊列
--支付度列:
1, 在Rabbitmq 平臺創建一個隊列
2, 在編寫生產者代碼
3,在編寫消費者代碼
MQ如何保證消息不丟失:
1.生產者角色:
確保生產者投遞消息到MQ服務器成功。
ACk消息確認機制: 同步或者異步的形式
方式一: confirms
方式二: 事務消息:
2,消費者角色:
在rabbitmq中:
必須要將消息消費成功後纔會將該消息從mq服務器中移除。
在kafka中:
不管是消費成功還是消費失敗: 消息都不會立刻移除。
3,MQ服務器端:在默認情況下,都會對隊列中的消息實現持久化,持久化到硬盤。
RabitMQ工作隊列
默認的傳統隊列是爲均攤消費,存在不公平性;如果每個消費者速度不一樣的情況下,均攤消費是不公平的,應該是能者多勞。
採用工作隊列
在通道中只需要設置basicQos爲1即可,表示MQ服務器每次只會給消費者推送1條消息必須手動ack確認之後纔會繼續發送。
channel.basicQos(1);
RabbitMQ交換機類型
Direct exchange(直連交換機)
Fanout exchange(扇型交換機)
Topic exchange(主題交換機)
Headers exchange(頭交換機)
/Virtual Hosts---區分不同的團隊
----隊列 存放消息
----交換機 路由消息存放在那個隊列中 類似於nginx
---路由key 分發規則
RabitMQ Fanout 發佈訂閱
生產者發送一條消息,經過交換機轉發到多個不同的隊列,多個不同的隊列就多個不同的消費者。