接着上一章来:https://blog.youkuaiyun.com/weixin_37460672/article/details/90414085
1.使用RestTemplate和Ribbon来消费服务
2.启动eureka-server端口为8761和两个eureka-client端口分别为8762和8763
启动命令:
java -jar eureka-client-0.0.1-SNAPSHOT.jar --spring.profiles.active=client1
java -jar eureka-client-0.0.1-SNAPSHOT.jar --spring.profiles.active=client2
3.创建Module工程springboot项目eureka-ribbon-client,通过RestTemplate远程调用eureka-client服务的API接口的“/hi”
4.pom文件
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.wl</groupId>
<artifactId>springcloud20190521</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.wl</groupId>
<artifactId>eureka-ribbon-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-ribbon-client</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
5.application.yml配置文件端口:8764服务名:eureka-ribbon-client服务注册地址 http://localhost:8761/eureka/
spring:
application:
name: eureka-ribbon-client
server:
port: 8764
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
6.EurekaRibbonClientApplication加上注解@EnableEurekaClient开启Eurekaclient功能
@EnableEurekaClient
@SpringBootApplication
public class EurekaRibbonClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaRibbonClientApplication.class, args);
}
}
7.只需要在IoC容器中注入一个restTemplate的bean并在这个bean上加@LoadBalanced注解,此时RestTemplate就结合了Ribbon开启了负载均衡
/**
* Created by lailai on 2019/5/22.
*/
@Configuration
public class RibbonConfig {
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
}
8.写一个RibbonService类,在hi()方法用restTemplate调用eureka-client的API接口
@Service
public class RibbonService {
@Autowired
RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "hiError")
public String hi(String name) {
return restTemplate.getForObject("http://eureka-client/hi?name=" + name, String.class);
}
public String hiError(String name) {
return "hi," + name + ",sorry,error!";
}
}
9.写一个RibbonController调用RibbonService的hi()方法
@RestController
public class RibbonController {
@Autowired
private RibbonService ribbonService;
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("hi")
public String hi(@RequestParam(required = false,defaultValue ="admin") String name){
return ribbonService.hi(name);
}
}
10.启动项目eureka-ribbon-client浏览器访问http:localhost:8764/hi?name=zhangsan
浏览器会轮流显示8762和8763服务,RestTemplate结合Ribbon实现负载均衡