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


 目錄:

springcloud費話之Eureka基礎

springcloud費話之Eureka集群

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

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

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

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

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

 

 完成了Eureka的服務器集群的搭建后,需要相互調用訪問,該訪問主要分為兩種內容的請求

①對集群中的所有客戶端的注冊信息請求

②對集群中的所有客戶端的接口的調用

 

本文使用restTemplate方式來實現相互調用

 

一、獲取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列表

 

二、使用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的負載均衡,那么就能做到靜態頁面,或對后端請求的均衡,加上上述策略,即可達到前端和服務端的雙端負載均衡


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM