A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小江哥 黑马粉丝团   /  2018-9-22 19:09  /  1050 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、负载均衡服务的搭建       首先新建一个空的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学习之路总览页下载查看。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马