前言
在上一篇文章中,我們說(shuō)到了異步消息通訊,下面這篇文章呢,大部分內(nèi)容是翻譯來(lái)自于這篇微軟的文章,所以其內(nèi)容還是具有一定的理論指導(dǎo)意義的。
當(dāng)我們跨多個(gè)微服務(wù)進(jìn)行內(nèi)部通訊的時(shí)候,異步消息和事件驅(qū)動(dòng)至關(guān)重要。我們可能需要在不同的邊界上下文中進(jìn)行域模型的更新。
我們舉個(gè)例子,比如 eShop 這個(gè)項(xiàng)目中,Ording 服務(wù)在下單的時(shí)候要和 Catelog 服務(wù)進(jìn)行通訊進(jìn)行庫(kù)存的扣減操作,這個(gè)時(shí)候我們就需要一種方式來(lái)做這個(gè)事情,并且能夠在發(fā)生故障的時(shí)候也能正常工作,也就說(shuō)需要進(jìn)行基于異步消息和最終一致性的通訊方式。
當(dāng)使用基于消息的通訊方式的時(shí)候,進(jìn)程中是采用的異步的方式通訊的??蛻舳讼蚰硞€(gè)服務(wù)發(fā)送消息,如果這個(gè)消息需要回復(fù),那么另一個(gè)服務(wù)會(huì)向客戶端發(fā)送一個(gè)不同的消息,并且客戶端會(huì)認(rèn)為該消息不會(huì)立即被接收到,并且不存在響應(yīng),這就是一種基于消息的通訊方式。
消息由標(biāo)題(name 或者 title)和內(nèi)容(Body)共同構(gòu)成。消息通常會(huì)通過(guò)一些異步協(xié)議進(jìn)行發(fā)送(如AMQP,kafka協(xié)議)。
異步消息通訊有兩種:一種是單接收者(端到端),另外一種是多接收者(廣播)。
如果有同學(xué)對(duì)消息隊(duì)列比較了解的話,這就是消息隊(duì)列的兩種典型使用方式。