到了這裏,咱們已經有了兩個微服務,他們是獨立的,能夠根據本身的步調去部署和更新,他們之間用了輕量級的協議(HTTP),可是這就是響應式服務了嗎?不,這還不是,記住,被叫作一個響應式微服務須要知足下面的:java
• Autonomous 自治的react
• Asynchronous 異步的web
• Resilient 彈性的編程
• Elastic 靈活的微信
當前設計的主要問題是兩個微服務之間的緊耦合,Web client 明確被配置爲消費第一個 microservice ,若是第一個服務掛了,並不會自動去找另外一臺有用的服務。若是咱們在高負荷下,建立一個新的 hello microService 服務並不能幫助咱們,得益於 Vert'x web client , 這個交互是異步的。而後,咱們並不能用一個虛擬的地址(destination)來響應服務,但其直接的URL,它並無提供咱們須要的靈活性和彈性。網絡
注意到在第二個 mocroService 使用響應式編程並無享受到響應式系統的便利。他提供了一個優雅的開發模型來協調異步操做,可是沒有提供咱們須要的彈性和分佈式。數據結構
咱們能夠在響應式服務中使用 HTTP 嗎?是的,可是這須要一些基礎設施來路由虛擬的URLs到一系列的服務。咱們能夠實現負載均衡的策略來提供分佈式和健康檢查支持來改進彈性需求。負載均衡
不要失望,在下一個章節中,咱們將在響應式服務中前進一大步。異步
Vert.x 提供了 event bus 容許應用的不一樣組件經過消息來交互,帶有headers 和 body 的消息被髮送到地址。地址是一個字符串標示一個目的地。消息消費者在地址上註冊來接受消息。這個 event bus 也能夠是一個集羣,這意。着在網絡環境下能夠是分佈的發送者和消費者,在集羣模式下啓動應用,節點之間能夠鏈接分享數據結構,停機故障檢測,負載平衡集羣通訊。event bus 能夠分發集羣內的全部節點的消息,爲了建立這樣一個集羣的配置,你可使用 Apache Ignite, Apache Zookeeper, Infinispan, 或者 Hazelcast 。在這裏,咱們將會使用 Infinispan,可是咱們沒有用到什麼高級配置,Infinispan 的文檔(http://in nispan.org/)。Infinispan (或你選擇的技術實現)管理節點的重啓和發現,event bus 的交流使用直接的peer-to-peer 的TCP 鏈接。分佈式
event bus 提供了三種類型的傳遞語義,首先,發送方法容許一個組件將消息發送到一個地址,一個單一的消費者會收到消息,若是有一個以上的消費者在這個地址註冊Vert.X採用輪詢策略選擇一個消費者:
與發送相反,你可使用發佈方法傳遞消息到全部的註冊在該地址的消費者。最後,發送的方法能夠用一個答覆處理。這個請求/響應機制能夠實現基於消息的異步交互兩部分:
若是你使用 Rx-ified APIs,你可使用 rxSend 方法,返回一個 Single 。 這個Single 接收一個值,當響應到達的時候,咱們將不久看到這樣的方法實現。
週五了,週末愉快!!!
原文地址:
https://developers.redhat.com/promotions/building-reactive-microservices-in-java/
有什麼討論的內容,能夠發我微信公衆號: