各個章節可能有關聯關係,查找《SpringCloud實戰教程》其他章節請參考:
http://www.yayihouse.com/yayishuwu/book/79
6. Springcloud通過ribbon負載均衡調用其他服務接口示例教程
(0) 在前面章節《idea創建springcloud服務提供者工程euraka-client》所創建的項目中添加以下服務接口給ribbon客戶端消費調用。
@RequestMapping("/getPort")
@ResponseBody
public String getPort(HttpServletRequest request){
return "服務的端口:"+request.getServerPort();
}
(1) 右鍵剛剛創建好的工程--》New--》Module--》Spring Initializr--》next--》修改一下Group爲com.wlg.springcloud和Artifact爲eureka-client-ribbon--》next--》Spring Cloud Routing--》勾選Ribbon(Maintenance) --》 next--》Finish。
(2) 啓動類上加上@EnableDiscoveryClient註解
@SpringBootApplication
@EnableDiscoveryClient
public class EurekaClientRibbonApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientRibbonApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
(3) 把application.properties改爲application.yml,內容如下:
server:
port: 9904
spring:
application:
name: service-four
eureka:
client:
serviceUrl:
defaultZone: http://localhost:9901/eureka/
instance:
prefer-ip-address: true
(4) pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.wlg.springcloud</groupId>
<artifactId>springcloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.wlg.springcloud</groupId>
<artifactId>eureka-client-ribbon</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-client-ribbon</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
</project>
(5) Ribbon通過restTemplate調用服務的代碼:
@RestController
public class RibbonClientController {
@Autowired
RestTemplate restTemplate;
@RequestMapping("/getPort")
public void getPort(HttpServletResponse response) throws IOException {
final String result = restTemplate.getForObject("http://SERVICE-ONE/getPort", String.class);
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter writer = response.getWriter();
writer.print(result);
writer.flush();
writer.close();
}
}
(6) 測試要結合前面幾章來聯合測試,分別啓動註冊中心eureka-server、eureka-client(端口分別修改爲9902和9903並分別啓動)和現在的eureka-client-ribbon,瀏覽器訪問註冊中心服務:http://localhost:9901/就可以看到服務提供者service-one(兩個端口兩個服務)和service-four已經註冊到註冊中心了。
在瀏覽器地址欄輸入:http://localhost:9904/getPort
瀏覽器就會顯示不同結果:
有時是:服務的端口:9903 有時是:服務的端口:9902
這個就說明ribbon通過輪詢的方式調用註冊中心中其他服務接口成功