消息队列基础讲解
我們微服務里為什么要使用消息隊列,這里我們在做一個簡單的回顧,我們微服務為什么要使用消息隊列呢,其實就圍繞著這么幾個關鍵的節點展開,第一個就是服務和服務之間的同步變異步,第二個是什么呢,通過消息隊列,解除服務跟服務之間的耦合,讓他們變成一個完全松耦合的設計,還有一個就是流量的削峰,這些問題都可以通過消息中間件來化解,那么我們再來看一下,消息隊列的基礎知識,在消息隊列當中呢,他提供了兩個比較重要的概念,一個叫Provider,一個叫Consumer,那么Provider指的是什么呢,其實就是消息生產者,投遞消息的程序,Consumer就是消息消費者的程序,那么像我們這些圖片當中,其實都有Provider和Consumer的,比如訂單服務,就是消息的提供者,一個Provider,像短信服務和Email服務,他們都是消費消息的,如果我們的程序當中,沒有使用消息隊列,那也就是意味著Provider和Consumer是直接通信的,調用接口,直接發送信息,其實這么做上節課我們說了,缺點是Provider和Consumer是緊耦合的,除了緊耦合還是同步的,不是異步的設計,所以我們需要在Provider和Consumer之間,加入一個消息隊列,那么我們下面看這個圖,使用消息隊列和消息傳送的方式,Provider在提供消息的時候,消息是直接放到消息隊列當中,然后消費者,Consumer是直接從消息隊列里拿東西,其實這種方式不就是我們畫的那個圖嗎,Provider將信息放到MQ中,Consumer去MQ中拿消息,所以中間加了一個消息隊列,那么我們來看一下什么是消息隊列,其實消息隊列就像商品的倉庫或者商店一樣,是生產商品的工廠,和購買商品的用戶之間的中轉站,也就是說消息隊列其實就是,Provider和Consumer之間的那個信息的中轉站,你現在需要把信息傳遞給它,并且是非直接的傳遞,你先要把消息放一個位置,然后Consumer去這個位置去取,這個位置其實就是指的我們的消息隊列,那么隊列里面存了什么呢,在RabbitMQ中,信息流從你的應用程序出發,來到Rabbit隊列當中,所有的信息可以只存在一個隊列,這個隊列你所有的東西都可以往里塞,塞多少都可以,理論上都可以的,隊列可以存儲很多信息,因為他基本是一個無限制的緩存區,什么意思呢,我消息隊列本身并沒有對消息的數量的上限做一個限制,我這里到底能夠存多少信息呢,我說過理論上是無限的,到底取決于什么呢,前提是你的機器的內存足夠大,它是把信息緩存到內存當中的,所以只要你內存足夠大,我消息隊列就可以存,無限的信息,無限的消息,當然如果你內存過小,他存的消息的數量也會存在影響,然后我們再來看,隊列和應用程序的關系,多個生產者可以將消息發送給同一個隊列中,多個消費者也可以從一個隊列接收,其實我們上面這個圖已經畫的很清楚了,這就是多個消費者從一個隊列里進行消費,所以這里消費隊列,Provider和Consumer來講,不是只能支持一個Provider,他可以支持多個Consumer,當然消息隊列也可以有多個,大家一定要把模型記住,Provider和Consumer的解釋,什么是Provider,什么是Consumer,一定要搞清楚這兩個角色,消息的發送方Provider,消費你消息的是Consumer,我們主要是對消息隊列的基礎東西做一個講解
?
總結
- 上一篇: 为什么要用RabbitMQ
- 下一篇: 消息队列入门案例-环境搭建