在消费者服务上使用Ribbon
1.导入Ribbon依赖
<!--导入Eureka和Ribbon-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-ribbon -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
2.修改配置
修改application.yaml文件。这里是为了连接Eureka集群
#Eureka配置
eureka:
client:
register-with-eureka: false #不向Eureka注册自己
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #默认连接的Server的Url
3.在ConfigBean中为getRestTemplate方法添加注解
添加@LoadBalanced注解,启用Ribbon负载均衡功能
@Configuration
public class ConfigBean { //@Configuration -->相当于 spring applicationContext.xml
配置负载均衡实现RestTemplate。将这个类注册到Bean,交给Spring托管
@Bean
@LoadBalanced //Ribbon
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
4.修改DeptController中连接常量
@RestController
public class DeptConsumerController {
//消费者不应该有Service层
//RestTemplate...供我们调用就可以了。需要先将他注册进Spring
//(url,实体:Map,Class<T> responseType)
@Autowired
private RestTemplate restTemplate; //提供多种便捷访问Http服务的方法,简单的Restful服务模板
//常用请求是localhost:8001/xxx,我们将这个前缀定义成常量方便使用
// 使用Ribbon实现时,这里应该是个变量,故注释掉,用服务名访问
//private static final String REST_URL_PREFIX = "http://localhost:8001";
private static final String REST_URL_PREFIX = "http://SPRINGCLOUD-PROVIDER-DEPT";
5.为主启动类添加@EnableEurekaClient注解
添加该注解,以使其访问Eureka集群,在其中找服务
package com.jlu.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
//Eureka和Ribbon整合后,客户端可以直接调用,不用关心IP地址和端口号
@SpringBootApplication
@EnableEurekaClient
public class DeptConsumer_80 {
public static void main(String[] args) {
SpringApplication.run(DeptConsumer_80.class,args);
}
}
开始测试
由于Ribbon的原理是:连接Eureka注册中心集群,在集群中获取可以使用的微服务。
之前我们只有一个8001提供者服务,现在我们创建另外两个,形成小集群
0.新建两个数据库
新建DB02和DB03数据库,类似之前的DB01,这里不再赘述。
1.新建模块
新建普通maven项目,取名为springcloud-provider-dept-8002和springcloud-provider-dept-8002
修改其内容,使其成为新提供者
注意:这三个提供者模块的spring.application.name必须一致!才能形成集群
spring:
application:
name: springcloud-provider-dept