1. 程式人生 > >rabbit MQ 學習

rabbit MQ 學習

 

 

使用比較多的是 叢集模式:  映象佇列模型

 

安裝 rabbitMQ

wget https://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm
wget http://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-5.el7.lux.x86_64.rpm
wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.suse.noarch.rpm

以上是地址

安裝的依賴的

yum install
build-essential  openssl openssl-devel unixODBC unixODBC-devel
make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz

 

修改配置

vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app
比如修改密碼,配置 

比如  loopback_users 中的 <<"gest">>, 只保留 guest 即可

服務啟動和停止

啟動 rabbitmq-server start  & 

停止  rabbitmqctl app_stop  或者 rabbitmq-server stop

如果  rabbitmqctl stop_app 也 停止不了。

那麼就去到 rabbitmqctl 對應目錄下去執行

比如 我的 rabbitmq 安裝後的目錄是

 /usr/lib/rabbitmq

然後進入 cd /usr/lib/rabbitmq/bin

就看到了

rabbitmqctl  rabbitmq-defaults  rabbitmq-env  rabbitmq-plugins  rabbitmq-server
執行  rabbitmqctl stop_app 就停止了

 

lsof -i:5672
 也可以檢視 rabbitmq  是否關閉或者啟動了

 

管理外掛:

啟用管控臺:比如在 /usr/lib/rabbitmq/bin 目錄下 敲命令:

rabbitmq-plugins enbale rabbitmq_management  

管控臺的埠號: 15672 

訪問地址:  地址xxx:15672/ 

登陸的使用者名稱和密碼就是前面改的  :  guest  

 

 

 

rabbitMQ 架構模型

 

 

生產者 生產訊息, 然後 到  exchange 交換機裡面, 根據 交換規則, 路由到 不同的  queues 佇列裡面,然後 消費者 clients 去消費 訊息

 

核心概念

 

 

Channel :  網路通道,幾乎所有的操作都在 channel中進行, channel是進行訊息讀寫的通道。

客戶端可建立多個 channel ,每個 channel代表義工會話任務。

 

 

virtual host 

 

 

 

 

 

生產者 生產訊息, 傳送 訊息 到 Message , 然後 根據 路由規則, 到 exchange  , exchange 根據  和 Message Queue 的繫結路由鍵, 將訊息路由到 對應的 queuee 上,然後you 監聽到 message queue 的消費者 去消費 訊息 

 

 

保障訊息100% 生產投遞成功

 

 

上圖指得是 生產端 生產的訊息

生產者 Sender 產生訊息的同時, 會將對應的業務資料和 訊息記錄日誌記錄到 資料庫裡面。

把訊息傳送給MQ後, 通過 Confirm Listener 來 收到 確認訊息投遞成功。

如果 Confirm Listener  訊息成功之後 ,更新 狀態 status=1 成功了。

否則, 通過定時任務判斷訊息狀態為0 的訊息, 也是找到未成功傳送的訊息,然後去重發給 MQ 

 

至於消費端是否重複收到訊息 產生的 影響,肯定要 訊息端 自己去保證 訊息處理的 冪等性了。

 

 

 

 

 

 

 

 

 

以上來自慕課網