4.1、RestTemplate 簡介
?
4.2、Ribbon 簡介
Spring 框架。?
?4.3、使用RestTemplate和Ribbon來消費
?
服務端負載均衡和客戶端負載均衡,?
ProviderService.java
package com.cr.eurekaclient.service; import org.springframework.stereotype.Service;@Service public class ProviderService {public String port(){return "8080";} }
?
什么是Springcloud。?PortController.java
package com.cr.eurekaclient.controller;import com.cr.eurekaclient.service.ProviderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class PortController {@AutowiredProviderService providerService;@GetMapping("/port")public String getPort(){return providerService.port();} }
?
?配置文件:
server.port=8089 spring.application.name=CLINET #應用起名字spring.application.name=provider #注冊服務時使用服務的ip地址 eureka.instance.prefer-ip-address=true #服務中心地址 eureka.client.service-url.defaultZone=http://localhost:8762/eureka/
Spring Cloud Bus。?訪問:
?
去注冊中心可以看到此時的服務已經在注冊中心注冊:
Springcloud定時任務,
這里的Application將會是消費者中引用的地址!!!
?
Springcloud微服務、?服務的消費者:
?
RibbonConfig.java
@Configuration public class RibbonConfig {@Bean@LoadBalancedRestTemplate restTemplate(){return new RestTemplate();} }
?
RibbonController.java
@RestController public class RibbonController {@AutowiredRibbonService ribbonService;@GetMapping("/port")public String port(){return ribbonService.port();} }
?
@Service public class RibbonService {@AutowiredRestTemplate restTemplate;public String port(){return restTemplate.getForObject("http://CLINET/port",String.class);} }
?http://CLINET/port中的CLIENT為注冊中心中的Application中的值
?
@EnableEurekaClient @SpringBootApplication public class EurekaRibbonClientApplication {public static void main(String[] args) {SpringApplication.run(EurekaRibbonClientApplication.class, args);} }
?
配置文件:
spring.application.name=eureka-ribbon-client server.port=8088 eureka.client.service-url.defaultZone=http://localhost:8762/eureka/
@LoadBalanced開啟負載均衡功能?
測試實現:?
同時也將8090換成8089,使用maven進行打包
?
在cmd中運行兩個項目:
?
?
?此時8089、8090端口都可以進行訪問
?
?
?http://localhost:8088/port頁面進行刷新請求
?
?
?
?
?4.4、loadBalancerClient 簡介
?
在工程中進行測試:
?
RibbonController.java?
package com.cr.eurekaribbonclient.controller;import com.cr.eurekaribbonclient.service.RibbonService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class RibbonController {@AutowiredRibbonService ribbonService;@GetMapping("/port")public String port(){return ribbonService.port();}@Autowiredprivate LoadBalancerClient loadBalancerClient;@GetMapping("/testRibbon")public String testRibbon(){ ServiceInstance instance = loadBalancerClient.choose("CLINET");return instance.getHost()+ ":" + instance.getPort();} }
?
?
?
spring.application.name=eureka-ribbon-client server.port=8088 eureka.client.service-url.defaultZone=http://localhost:8762/eureka/ stores.ribbon.listOfServers:example.com,google.com ribbon.eureka.enabled=false
?
?
package com.cr.eurekaribbonclient.controller;import com.cr.eurekaribbonclient.service.RibbonService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class RibbonController {@AutowiredRibbonService ribbonService;@GetMapping("/port")public String port(){return ribbonService.port();}@Autowiredprivate LoadBalancerClient loadBalancerClient;@GetMapping("/testRibbon")public String testRibbon(){ServiceInstance instance = loadBalancerClient.choose("CLINET");return instance.getHost()+ ":" + instance.getPort();}//進一步說明@GetMapping("/hi")public String hi(){ServiceInstance instance = loadBalancerClient.choose("stores");return instance.getHost()+ ":" + instance.getPort();} }
?
?