springcloud費話之Eureka服務訪問(restTemplate)

 目錄:html

springcloud費話之Eureka基礎前端

springcloud費話之Eureka集羣java

springcloud費話之Eureka服務訪問(restTemplate)nginx

springcloud費話之Eureka接口調用(feign)web

springcloud費話之斷路器(hystrix in feign)spring

springcloud費話之配置中心基礎(SVN)後端

springcloud費話之配置中心客戶端(SVN)api

 

 完成了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的負載均衡,那麼就能作到靜態頁面,或對後端請求的均衡,加上上述策略,便可達到前端和服務端的雙端負載均衡

相關文章
相關標籤/搜索