目錄:html
springcloud費話之Eureka服務訪問(restTemplate)nginx
springcloud費話之Eureka接口調用(feign)web
springcloud費話之斷路器(hystrix in feign)spring
完成了Eureka的服務器集羣的搭建後,須要相互調用訪問,該訪問主要分爲兩種內容的請求瀏覽器
①對集羣中的全部客戶端的註冊信息請求服務器
②對集羣中的全部客戶端的接口的調用
本文使用restTemplate方式來實現相互調用
1、獲取server中的註冊的client的信息
1.代碼
找一個client,寫一個java類,內容以下:
package com.lyh.lyh_eureka_server.controller;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.netflix.appinfo.InstanceInfo; import com.netflix.discovery.EurekaClient; @RestController @EnableEurekaClient public class TestController { @Autowired private EurekaClient eurekaClient; @RequestMapping("/getServerInfo") public Object getServerInfo() { // 經過eurekaClient訪問服務器獲取某個命名的集羣。 // getNextServerFromEureka的第一個參數是服務器名稱,可重複 // 由於得到的是下一個,因此是負載均衡的 InstanceInfo nextServerFromEureka = eurekaClient.getNextServerFromEureka("eureka-client-9020", false); System.out.println("name:" + nextServerFromEureka.getAppName() + " port:" + nextServerFromEureka.getPort()); return nextServerFromEureka; } }
2.訪問
訪問該服務的地址+‘/getServerInfo’,瀏覽器訪問獲得的結果以下,更多api本身去查
3.測試負載均衡效果
將三個client修改成同名,在運行,查看結果,只啓動一個server服務方便測試
此時server註冊結果以下
此時刷新getServerInfo服務,發現端口號的變化,三個客戶端的端口順序獲取,實現負載均衡。
若client分佈於不一樣的server,則該client只能獲取當前註冊的server中的client列表
2、使用eureka服務發現實現服務器之間的http訪問(restTemplate)
1.服務代碼
代碼以下:
package com.lyh.lyh_eureka_server.controller;
import java.net.URI; import java.net.URISyntaxException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import com.netflix.appinfo.InstanceInfo; import com.netflix.discovery.EurekaClient; @RestController @EnableEurekaClient public class TestController { @Autowired private EurekaClient eurekaClient; @RequestMapping("/getServerInfo") public Object getServerInfo() { // 經過eurekaClient訪問服務器獲取某個命名的集羣。 // getNextServerFromEureka的第一個參數是服務器名稱,可重複 // 由於得到的是下一個,因此是負載均衡的 InstanceInfo nextServerFromEureka = eurekaClient.getNextServerFromEureka("eureka-client", false); System.out.println("name:" + nextServerFromEureka.getAppName() + " port:" + nextServerFromEureka.getPort()); return nextServerFromEureka; } // 觸發的接口 @RequestMapping("/getInfoFromClient") public Object getInfoFromClient() throws URISyntaxException { InstanceInfo nextServerFromEureka = eurekaClient.getNextServerFromEureka("eureka-client", false); System.out.println("name:" + nextServerFromEureka.getAppName() + " port:" + nextServerFromEureka.getPort()); RestTemplate restTemplate = new RestTemplate(); String u = "http://" + nextServerFromEureka.getIPAddr() + ":" + nextServerFromEureka.getPort() + "/getInfo"; URI uri = new URI(u); String obj = restTemplate.getForObject(uri, String.class); System.out.println(obj.toString()); return obj; } // 接口訪問的服務 @RequestMapping("/getInfo") public Object getInfo() { return "I am info from client 9022"; } }
2.部署測試
持續訪問一個端口,查看訪問結果,以下:
3.服務訪問的前置負載均衡
若網絡來的請求,是通過了nginx的負載均衡,那麼就能作到靜態頁面,或對後端請求的均衡,加上上述策略,便可達到前端和服務端的雙端負載均衡