一、负载均衡服务的搭建 首先新建一个空的maven项目,取名feign-service,在创建过程中步添加任何依赖,直接在pom.xml文件里加,这样更能清楚的知道流程。建好一个空有结构的maven项目后,依旧按照三步走的方式去完成该微服务。
1、依赖包pom.xml文件 既然是微服务,那么肯定要添加微服务的定义包spring-cloud-starter-eureka或者spring-cloud-starter-eureka-server(仅限注册中心);一个微服务是需要被其他微服务发现的,以供调用或作它用,这便是spring-boot-starter-actuator包的作用;既然它是个feign负载均衡微服务,那么也得需要定义它的包spring-cloud-starter-feign。在pom.xml文件中,添加这三个依赖就可以了。
[XML] 纯文本查看 复制代码 <dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2、配置文件application.yml(application.properties)文件
[XML] 纯文本查看 复制代码 eureka:
client:
serviceUrl:
defaultZone: http://localhost:8000/eureka/
server:
port: 8002
spring:
application:
name: feign-service
作为一个微服务,它是需要注册到注册服务中心的,可以回到注册中心看看,端口8000也即是注册中心服务的端口。其次是需要定义负载均衡服务的服务端口,设置为8002,服务的注册名为feign-service(注意:要与路由网关中的服务名保持一致)。
3、后端代码的编写 (1)在java文件夹下新建一个com.springcloud.feign包,在该包下新建FeignServiceBootstrap类作为启动类,完善该类内容如下:
[Java] 纯文本查看 复制代码 @EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class FeignServiceBootstrap {
public static void main(String[] args) {
SpringApplication.run(FeignServiceBootstrap.class, args);
}
}
三个注解的含义也是比较明显的,第一个声明它是一个资源服务端,即可以通过某些接口调用一些资源;第二个声明他是个负载均衡服务;第三个声明其为springboot项目。写到这里,只是将这个负载均衡定义好了,但是并没有实际的功能。因此需要添加些东西,使之功能完善。
(2)在com.springcloud.feign包下,新建一个feign包,创建一个接口,取名BalancedFeign,填充内容如下:
[Java] 纯文本查看 复制代码 @FeignClient(value = "user-center")
public interface BalancedFeign {
@RequestMapping(value = "/test",method = RequestMethod.GET)
String sayFromClientOne();
}
注解声明了负载均衡的资源的注册名为“user-center”,这样就把负载均衡服务与资源服务联系起来了。那么如何去访问这个BalancedFeign呢,肯定的需要建一个控制层。(3)在com.springcloud.feign包下,新建一个controller包,作为控制层,与启动类的@EnableDiscoveryClient注解是呼应的。在该包下,新建一个FeignController类,填充内容如下:
[Java] 纯文本查看 复制代码 @RestController
public class FeignController {
@Autowired
BalancedFeign balancedFeign;
@RequestMapping("/test")
public String makeFeign() {
return balancedFeign.sayFromClientOne();
}
}
这样就完成了负载均衡服务,假如有注册名同为user-center的两个服务,当调用负载均衡的时候,便会在两个服务之间切换调用,从而达到负载均衡的目的。 假若这两个服务有一个挂掉了,而负载均衡正好调用到了这个挂掉了的服务,就会造成等待或者其他的不好的用户体验。为了更好的服务体验,所以我们需要一个熔断器来解决这个问题。
二、熔断器
改造接口BalancedFeign如下:
[Java] 纯文本查看 复制代码
@FeignClient(value = "user-center",fallback = SchedualServiceHystric.class)
public interface BalancedFeign {
@RequestMapping(value = "/test",method = RequestMethod.GET)
String sayFromClientOne();
}
实际上只是多了一个fallback,使服务在挂掉的时候提供一个反馈。接下来覆写反馈的内容,在feign包下,新建一个SchedualServiceHystric类,填充该类内容如下:
[Java] 纯文本查看 复制代码 public class SchedualServiceHystric implements BalancedFeign{
@Override
public String sayFromClientOne() {
return "这个服务出问题了";
}
}
当某个服务挂掉的时候,会立即进行反馈,或者作其他处理。至此,负载均衡与熔断器就介绍完了。需要参考源码的,可以回到springcloud学习之路总览页下载查看。
|