1:写在开头
在特殊情况下(比如开发测试阶段),不需要经过Eureka注册服务来访问Provider,可以利用Ribbon手动来指定一个或者多个Provider服务来实现负载均衡访问。结构如下图:
2:Consumer开发
A:在POM文件中引入ribbon,需要注意的是,如果POM中有Eureka的依赖,则需要去除Eureka的依赖。主要的POM如下
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.M3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
B:配置application.yml文件
server:
port: 8093 #服务端口号
spring:
application:
name: service-consumer #服务名称--调用的时候根据名称来调用该服务的方法
ribbon: #关闭Eureka
eureka:
enabled:false
service-provider: #指定具体的Provider服务清单,多个用,隔开
ribbon:
listOfServers: http://127.0.0.1:8082,http://127.0.0.1:8083
注意:application.yml中不能用table键来对齐,key:和value之间有空格
C:利用RestTemplate和ribbon来实现负载均衡访问provider服务。
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient;//ribbon 负载均衡客户端
@GetMapping("/home")
public String getHome() {
ServiceInstance si=loadBalancerClient.choose("service-provider");
StringBuffer sb=new StringBuffer("");
sb.append("http://");
sb.append(si.getHost());
sb.append(":");
sb.append(si.getPort());
sb.append("/home");
System.out.println(sb.toString());
String data = restTemplate.getForObject(sb.toString(), String.class);
return data;
}
注意: loadBalancerClient.choose("service-provider")中的service-provider需要和application.yml中配置的服务清单名一致.
D:启动启动类,运行项目
@SpringBootApplication
public class EurekaConsumerApplication {
@Bean
public RestTemplate rest() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(EurekaConsumerApplication.class, args);
}
}
E:启动Provider服务,启动的IP和端口和Consumer服务中配置的服务清单一致 ,此处就不详细描述Provider的搭建,在写本文的时候,启动了两个实例http://127.0.0.1:8082,http://127.0.0.1:8083
F:在测试工具中输入Consumer的访问地址,可以看到Provider返回的数据.