具體內容java
如今全部的服務已經經過了 Eureka 進行了註冊,那麼使用 Eureka 註冊的目的是但願全部的服務都統一歸屬到 Eureka 之中進 行處理,可是如今的問題,全部的微服務聚集到了 Eureka 之中,而客戶端的調用也應該經過 Eureka 完成。而這種調用就能夠利用 Ribbon 技術來實現。須要JAVA Spring Cloud大型企業分佈式微服務雲構建的B2B2C電子商務平臺源碼 一零三八七七四六二六web
Ribbon 是一個服務調用的組件,而且是一個客戶端實現負載均衡處理的組件。服務器端實現負載均衡可使用 Nginx、 HAProxy、LVS 等。spring
Ribbon 基本使用bash
一、 【microcloud-consumer-80】修改 pom.xml 配置文件,追加 Ribbon 相關依賴支持包:服務器
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
複製代碼
二、 【microcloud-consumer-80】修改 RestConfig 配置類,在獲取 RestTemplate 對象的時候加入 Ribbon 的配置註解@LoadBalanced。app
package cn.study.microcloud.config;
import java.nio.charset.Charset;
import java.util.Base64;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestConfig {
@Bean
public HttpHeaders getHeaders() { // 要進行一個Http頭信息配置
HttpHeaders headers = new HttpHeaders(); // 定義一個HTTP的頭信息
String auth = "studyjava:hello"; // 認證的原始信息
byte[] encodedAuth = Base64.getEncoder()
.encode(auth.getBytes(Charset.forName("US-ASCII"))); // 進行一個加密的處理
// 在進行受權的頭信息內容配置的時候加密的信息必定要與「Basic」之間有一個空格
String authHeader = "Basic " + new String(encodedAuth);
headers.set("Authorization", authHeader);
return headers;
}
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
複製代碼
三、 【microcloud-consumer-80】修改 aplication.yml 配置文件,追加 Eureka 的服務註冊地址配置。負載均衡
server:
port: 80
eureka:
client:
register-with-eureka: false #客戶端不註冊到eureka,只是進行服務的調用
service-url:
defaultZone: http://edmin:studyjava@eureka-7001.com:7001/eureka,http://edmin:studyjava@eureka-7002.com:7002/eureka,http://edmin:studyjava@eureka-7003.com:7003/eureka
複製代碼
四、 【microcloud-consumer-80】修改項目的啓動類,追加 Eureka 客戶端的配置註解:分佈式
package cn.study.microcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class Consumer_80_StartSpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(Consumer_80_StartSpringCloudApplication.class,
args);
}
}
複製代碼
五、 【microcloud-consumer-80】修改控制器調用類;微服務
如今在 eureka 之中註冊的全部服務的名稱都是大寫字母:MICROCLOUD-PROVIDER-DEPT;ui
package cn.study.microcloud.controller;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import cn.study.vo.Dept;
@RestController
public class ConsumerDeptController {
public static final String DEPT_GET_URL = "http://MICROCLOUD-PROVIDER-DEPT/dept/get/";
public static final String DEPT_LIST_URL = "http://MICROCLOUD-PROVIDER-DEPT/dept/list/";
public static final String DEPT_ADD_URL = "http://MICROCLOUD-PROVIDER-DEPT/dept/add?dname=";
@Resource
private RestTemplate restTemplate;
@Resource
private HttpHeaders headers;
@RequestMapping(value = "/consumer/dept/get")
public Object getDept(long id) {
Dept dept = this.restTemplate
.exchange(DEPT_GET_URL + id, HttpMethod.GET,
new HttpEntity<Object>(this.headers), Dept.class)
.getBody();
return dept;
}
@SuppressWarnings("unchecked")
@RequestMapping(value = "/consumer/dept/list")
public Object listDept() {
List<Dept> allDepts = this.restTemplate
.exchange(DEPT_LIST_URL, HttpMethod.GET,
new HttpEntity<Object>(this.headers), List.class)
.getBody();
return allDepts;
}
@RequestMapping(value = "/consumer/dept/add")
public Object addDept(Dept dept) throws Exception {
Boolean flag = this.restTemplate.exchange(DEPT_ADD_URL, HttpMethod.POST,
new HttpEntity<Object>(dept, this.headers), Boolean.class)
.getBody();
return flag;
}
}
複製代碼
訪問地址:client.com/consumer/de… Ribbon 與 Eureka 整合以後用戶再也不去關注具體的 Rest 服務的地 址與端口號了,全部的信息獲取都經過 Eureka 完成。java B2B2C Springcloud電子商務平臺源碼