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
至於消費端是否重複收到訊息 產生的 影響,肯定要 訊息端 自己去保證 訊息處理的 冪等性了。
以上來自慕課網