Ribbon 作为负载均衡,在客户端实现,服务段可以启动两个端口不同但servername一样的服务
Hystrix作为熔断流量控制,在客户端实现,在方法上注解,当请求出错时可以调用注解中的方法返回
Feign 可以定义请求到其他服务的接口,用于微服务间的调用,不用自己再写http请求,在客户端实现,调用此接口就像远程调用其他服务一样,当请求出错时可以调用接口的实现类来返回
一、客户端负载均衡:Spring Cloud Ribbon。
Spring Cloud Ribbon是基于HTTP和TCP的客户端负载工具,它是基于Netflix Ribbon实现的。通过Spring Cloud的封装,可以轻松地将面向服务的REST模板请求,自动转换成客户端负载均衡服务调用。
客户端负载均衡示意图
废话不多说,进入代码实例,通过一个小例子学习一下Ribbon。
Demo实例学习
(1)服务模块介绍:
sc-eureka:服务注册中心,微服务的核心和基础模块,实现各服务的自动化注册与发现。
sc-service_a,sc-service_b:具体的微服务,提供特定的服务,为了实现负载均衡,a、b两个服务具有相同的实例名SERVICE-AB(也可以只创建一个服务SERVICE-AB,同时启动不同的实例)。
sc-customer:微服务消费服务,调用负载均衡客户端调用SERVICE-AB服务。
(2)项目结构与代码实例:
sc-eureka:
maven pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springcloud</groupId>
<artifactId>sc-eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>sc-eureka</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.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>Dalston.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置文件application.yml:
server:
port: 1111
eureka:
client:
service-url:
default-zone: http://localhost:1111/eureka/ #服务注册中心的地址,供其他服务组件调用进行注册。
fetch-registry: false
register-with-eureka: false
instance:
hostname: localhost
server:
enable-self-preservation: false #在调试时关闭eureka注册中心的保护机制
启动类:ScEurekaApplication.java
package com.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer //启动一个服务注册中心提供给其他应用进行对话
@SpringBootApplication //注解等价于以默认属性使用 @Configuration ,@EnableAutoConfiguration 和 @ComponentScan 。
public class ScEurekaApplication {