在消費者服務上使用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