通常微服務(wù)應(yīng)用之間的通信是通過HTTP調(diào)用,吞吐性不建都高,高并發(fā)的場景建議使用EVENT DRIVEN的框架,即使用MESSAGE通信。
即A微服務(wù)應(yīng)用將數(shù)據(jù)發(fā)送到MESSAGE BROKER中的某個DESTINATION,此DESTINATION是廣播型,非點對點型。B微服務(wù)應(yīng)用訂閱此DESTINATION,當(dāng)有新MESSAGE到達此DESTINATION時,MESSAGE BROKER會將此MESSAGE推送給B應(yīng)用。所有對此MESSAGE有需要的應(yīng)用均可訂閱,從而收到此MESSAGE。
SPRING CLOUD 中EVENT DRIVEN的框架就是SPRING CLOUD STREAM。其底層是使用SPRING INTEGRATION實現(xiàn)。
SPRING CLOUD STREAM有以下新名詞:
是對MESSAGE BROKER操作方法的抽象,即應(yīng)用通過此BINDER操作MESSAGE BROKER。目前只實現(xiàn)了RABITMQ和KAFKA。
MESSAGE從SPRING CLOUD STREAM傳給應(yīng)用或相反是通過CHANNEL傳遞的,這點和SPRING INTEGRATION是一樣的。
MESSAGE從應(yīng)用傳給SPRING CLOUD STREAM的CHANNEL,叫@INPUT,包含這種CHANNEL的接口叫SOURCE。
MESSAGE從SPRING CLOUD STREAM傳給應(yīng)用的CHANNEL,叫@OUPUT,包含這種CHANNEL的接口叫SINK。
綁定哪個@INPUT或哪個@OUPUT與哪個DESTINATION發(fā)送或接收關(guān)系的MAPPING。
應(yīng)用啟動時就會建立EnableBinding指定的接口中的CHANNEL
默認下如果同一個應(yīng)用部署了多個實例,則每個實例都會收到MESSAGE,這時如果設(shè)置了消費者群組名稱,則同一個名稱下的多個實例,只有一個能收到MESSAGE。
如果為MESSAGE指定規(guī)則,如MESSAGE某個字段值以A開頭為一個規(guī)則,以B開頭為一個規(guī)則,那么以A開頭的MESSAGE會放到同一個分區(qū)中。
這樣使用就很簡單了,只要取得OUTPUT CHANNEL,就可以發(fā)送MESSAGE,將代碼關(guān)聯(lián)到INPUT CHANNEL,就能在收到MESSAGE時,相關(guān)代碼就會被執(zhí)行。