在微服務環境中,每一個服務負責將功能或服務提供給其餘協做者。正如咱們在第一章中所討論的,構建分佈式系統是困難的,咱們不能抽象出網絡或潛在的故障。咱們將在第5章中介紹如何構建與依賴關係的彈性交互。可是,在本節中,咱們將只關注於讓服務與依賴服務進行對話。java
若是咱們但願擴展hello-world微服務,咱們將須要建立一個可使用Spring的REST客戶端函數調用的服務。對於這個示例和其餘示例,咱們將使用後端服務並修改咱們的服務以擴展到後端以生成咱們但願可以使用的問候語。git
若是您查看本書的源代碼,咱們將看到一個名爲backend的Maven模塊,它包含一個很是簡單的HTTPservlet,可使用GET請求和查詢參數調用它。這個後端的代碼很是簡單,不使用任何微服務框架(SpringBoot、DropWizard或WildFlySwarn)。咱們建立了一個封裝時間,IP和問候字段的ResponseDTO對象。咱們還利用JSON數據綁定的Jackson 庫,以下所示:github
要在端口8080上啓動後端服務,請導航到後端目錄並運行如下命令spring
$ mvn clean install jetty:run後端
後端項目使用maven jetty插件,它容許咱們使用mvn jetty:run 快速啓動咱們的應用程序。api
此服務在/api/backend,並接受一個查詢參數問候語。例如,當咱們使用此路徑/api/backend?greing=Hello調用此服務時,後端服務將使用以下JSON對象進行響應(也可使用瀏覽器訪問此URL):瀏覽器
$ curl -X GET http://localhost:8080/api/backend?greeting=Hello網絡
咱們會獲得以下的:app
咱們將在SpringBoothola-Spring啓動示例中建立一個新的HTTP端點/api/greay,並使用Spring來調用這個後端!框架
在src/main/java/com/示例中建立一個名爲GreeterRestController的新類,並將其填入相似於咱們爲HolaRestController填充的類(見示例2-4)。
Example 2-4. src/main/java/com/example/GreeterRestController.java
我已經省略了這個類中屬性的getter/setter,可是必定要在源代碼中包含它們!注意,咱們在這裏再次使用@ConfigreProperties註釋爲REST控制器配置一個配置塊,儘管這一次咱們使用的是問候語前綴。咱們還建立了一個GET端點,就像咱們對hola服務所作的那樣,它如今返回的是一個字符串,其中包含後端服務主機和端口的值(這些值是經過@ConfigreProperties註釋注入的)。讓咱們將backendServicehost和backendServicePort添加到咱們的application.properties文件中:
接下來,咱們將使用Spring的RestTemplate來調用遠程服務。RestTemplate遵循具備模板模式的long-lived Spring約定,在這個方便的包裝抽象中封裝了常見的HTTP/REST習慣用法,而後處理全部鏈接和編組/解組調用的結果。RestTemplate使用本機JDK進行HTTP/網絡訪問,但您能夠將其替換爲ApacheHttpComponents、OkHttp、Netty或其餘。
下面是使用RestTemplate時源代碼的樣子(一樣,getter/setters省略了,可是是必需的)。咱們正在與後端服務通訊,方法是根據已經注入的主機和端口構造一個URL,並添加一個名爲greing的GET查詢參數。咱們發送給歡迎參數後端服務的值來自GreeterRestController對象的Say字段,當咱們添加@ConfigurationProperties註釋時,該字段做爲配置的一部分被注入(示例2-5)。
讓咱們添加BackendDTO類,該類用於封裝來自後端的響應(示例2-6)。
如今,讓咱們構建微服務,並驗證咱們是否能夠調用這個新的歡迎端點,以及它是否正確地調用了後端。首先,讓咱們開始後端,若是它尚未運行。導航到此應用程序附帶的源代碼的後端目錄並運行它:
$ mvn clean install jetty:run
接下來,讓咱們構建並運行SpringBoot微服務。讓咱們還將此服務配置爲在與其默認端口(8080)不一樣的端口上運行,以便它不會與已經在端口8080上運行的後端服務發生衝突。
$ mvn clean install spring-boot:run -Dserver.port=9090
在本書的後面,咱們能夠看到如何在這些微服務本身的Linux容器中運行它們,從而消除運行時端口swizzling的限制。如今,讓咱們將瀏覽器導航到http://localhost:9090/api/greay,查看咱們的微服務是否正確地調用後端並顯示咱們所指望的內容:
在本章中,咱們瞭解了SpringBoot是什麼,它與傳統的WAR/EAR部署有什麼不一樣,以及一些簡單的用例,包括公開HTTP/REST端點、外部配置、度量以及如何調用另外一個服務。這只是皮毛,若是您有興趣瞭解更多關於Spring Boot的內容,請閱讀如下連接和書籍:
Spring Boot
Spring Boot Reference Guide
Spring Boot in Action
Spring Boot on GitHub
Spring Boot Samples on GitHub
原文:
做者源碼:https://github.com/redhat-developer/microservices-by-example-source