分布式应用解耦利器rabbitmq
消息能夠使應用連接和擴展,作為分布式架構中一大組件使用,消息是異步的能夠分離發送數據和接收數據,達到應用的解耦;
使用消息的基本特性是能夠無阻塞的發送消息,異步化處理應用調用邏輯,基本模式發布訂閱功能,或者是工作隊列模式
rabbitmq 是一個消息代理中間件
rabbitmq有六種工作模式,簡單模式,work模式,發布訂閱模式、路由模式,主題模式,RPC,在項目實踐中,rabbitmq的RPC功能一般不使用,有專業的RPC中間件替代,剩下的實質就兩種模式較為廣泛使用,work和訂閱模式,根據需求的實際場景進行選擇
如果消息是只允許一消費一次就用work模式,如果消息是允許指定的多消費者使用就使用直接、路由、主題模式
work模式:
當把消息封裝到隊列后,后臺的任務進程從隊列里那消息進行消費,后臺可以跑多個任務進程,隊列的消息對它們來說是共享的。
work模式有輪詢分發和公平分發
輪詢分發是通過輪詢平均分發到后臺消費者,這種方式如果由于其中一消費者進程處理緩慢會導致整體性能下降。
公平分發是通過確認每個消費者發送確認消息后才進行分發消息,這樣能很好的平衡性能。通過設置int prefetchCount = 1;channel.basicQos(prefetchCount);完成
訂閱模式:
work模式之允許發送消息給一個消費者,而訂閱模式可以發送一個消息給多個消費者。
訂閱模式是通過隊列綁定到交換機,由交換機告訴生產者發送消息到指定隊列。交換機的類型有fanout,direct、topic。?
fanout交換機沒有路由鍵值
direct交換機有唯一路由鍵值
topic交換機通過通配符指定路由鍵值,最靈活。使用最廣泛!?
通過消息通知管理和消息持久化保證消息不丟失:
當客戶端任務進程拿到任務執行時有異常導致消失丟失,消息通知管理機制保證消息的不丟失,它是通過客戶端發送確認消息通知rabbitmq的,如果發送端接收不到客戶端的消失確認會馬上重新發起消息。設置autoAck =false通過后臺任務進程手動發送關閉消息,
而持久化能夠保證rabbitmq退出或崩潰后消息不丟失。通過MessageProperties.PERSISTENT_TEXT_PLAIN設置持久化
rabbitmq集群
rabbitmq操作的所有數據和狀態都可以復制到集群所有節點,除了隊列
集群配置方式:通過客戶端工具,配置文件聲明
故障處理:可以任意啟動和停止集群各階段,不建議在wlan進行集群,推薦在lan中進行
硬盤還是內存:雖然內存節點能使交換機、隊列、提高性能,但不可靠,推薦所有節點為硬盤節點。
相同的Erlang Cookie確保集群所有節點的互相通信
通過負載均衡器連接rabbitmq集群,如:HAProxy
來源:https://blog.csdn.net/sz6554/article/details/54880649
總結
以上是生活随笔為你收集整理的分布式应用解耦利器rabbitmq的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Illegal mix of colla
- 下一篇: 应付款-付款期超过一年的应付款-履约保证