具体内容
现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册的目的是希望所有的服务都统一归属到 Eureka 之中进 行处理,但是现在的问题,所有的微服务汇集到了 Eureka 之中,而客户端的调用也应该通过 Eureka 完成。而这种调用就可以利用 Ribbon 技术来实现。需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六
Ribbon 是一个服务调用的组件,并且是一个客户端实现负载均衡处理的组件。服务器端实现负载均衡可以使用 Nginx、 HAProxy、LVS 等。
Ribbon 基本使用
1、 【microcloud-consumer-80】修改 pom.xml 配置文件,追加 Ribbon 相关依赖支持包:
org.springframework.cloud spring-cloud-starter-eureka org.springframework.cloud spring-cloud-starter-config 复制代码 org.springframework.cloud spring-cloud-starter-ribbon
2、 【microcloud-consumer-80】修改 RestConfig 配置类,在获取 RestTemplate 对象的时候加入 Ribbon 的配置注解@LoadBalanced。
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;@Configurationpublic 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(); }}复制代码
3、 【microcloud-consumer-80】修改 aplication.yml 配置文件,追加 Eureka 的服务注册地址配置。
server: port: 80eureka: 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复制代码
4、 【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@EnableEurekaClientpublic class Consumer_80_StartSpringCloudApplication { public static void main(String[] args) { SpringApplication.run(Consumer_80_StartSpringCloudApplication.class, args); }}复制代码
5、 【microcloud-consumer-80】修改控制器调用类;
现在在 eureka 之中注册的所有服务的名称都是大写字母:MICROCLOUD-PROVIDER-DEPT;
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;@RestControllerpublic 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
访问地址: Ribbon 与 Eureka 整合之后用户不再去关注具体的 Rest 服务的地 址与端口号了,所有的信息获取都通过 Eureka 完成。