一個微服務不能構成一個應用;你須要一個微服務的系統,如今咱們已經把咱們第一個微服務應用跑起來了,開始寫第一個微服務來消費他。第二個微服務也提供了HTTP調用,這一節中的代碼在(microservices/hello- consumer-microservice-http directory of the code repository)。java
一如既往,咱們建立一個新的項目:react
最後的命令增長另外一個依賴:Vert.x web client(異步的HTTP客戶端),咱們能夠用這個 client 調用第一個微服務。這個命令也會在後續的 Vert.x RxJava 綁定中用到。web
如今咱們編輯src/main/java/io/vertx/book/http/HelloConsumerMicroservice.java 文件,增長如下內容:編程
在 start 方法中,咱們建立了 WebClient 和 Router,在建立的 Router 中,咱們註冊了「/」路徑和啓動HTTP 服務,傳遞這個 router 到 requestHandler 處理方法。route 處理程序的方法引打到「hello」,這個方法使用 web client 調用第一個微服務(/vert.x),而後把結果寫到 HTTP response 中。微信
一旦 HTTP 請求被建立,咱們稱作發送了一個請求,該處理程序經過調用,響應到達或發生錯誤。if-else塊檢查是否調用成功,別忘了,這是一個遠程互動,有不少理由失敗。例如,第一個微服服務沒有運行,當它成功時,咱們把接收的 payload 的響應,不然,咱們返回 500 錯誤。併發
Calling the Service More Than Once異步
如今咱們改變如今調用微服務的方法,使用不一樣的參數調用兩次。maven
這兩個請求是獨立的,能夠併發執行。但在這裏咱們要寫一個響應裝配結果,代碼須要調用服務兩次,組裝兩結果是複雜的,由於當接受到一個請求完成的時候,咱們須要驗證另外一個請求是否完成。而這個代碼仍然要控制兩個請求,它變得過於複雜時,咱們須要處理更多。幸運的是,在前面的章節中提到的,咱們可使用響應式編程,用RxJava簡化代碼。函數
咱們用 vertx-maven-plugin 引入 Vert.x RxJava API。在 HelloConsumerMicroservice 中,咱們替換下面的引入:微服務
使用RX,複雜的代碼調用兩個請求整合他們的結果,這個變得簡單:
注意到 rxSend 方法調用,Vert.x 中的 Rxjava方法都是以 rx 前綴,方便辨識。rxSend 結果是簡單的,一個觀察者表明一個操做的可延期結果,single.zip 帶入一組 Single,一旦全部的人都接受了其中的值,調用結果的函數。single.zip產生包含另外一個函數的結果,最後,咱們訂閱。 這個方法有兩個函數做爲參數:
1.第一個是調用 zip 方法的結果(Json 對象)。咱們把接受到的 JSON payload 寫入HTTP response。
2.若是何時失敗了,第二個方法調用(超時,異常等),在這個例子中,咱們相應一個空的 JSON 對象。
代碼修改後,咱們打開 http://localhost:8081 ,hello microservice 運行後,咱們能夠看到:
原文地址:
https://developers.redhat.com/promotions/building-reactive-microservices-in-java/
有什麼討論的內容,能夠發我微信公衆號: