SpringCloud从零构建(四)——Feign实现负载均衡

Feign实现负载均衡

在项目开始之前我们首先要明白几个内容:
1)什么是负载均衡?
负载均衡用比较官方的描述就是

高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。

以我个人观点来讲就是分压、分流的意思,一个服务就像北京的胡同的单车道,当遇到早晚上下班高峰期时就很容易发生拥堵并且容易发生事故,但是如果是多车道,那就能最大限度的避免这种问题的发生。我们的每一个应用就好比单车道,但是如果不指明每个单车道要到达的地方,那就没有起到分流分压的作用,因此我们的工作的不但要建一个个的单车道,还要把这些单车道合并成目的地相同的多车道。
2)什么是Feign?

Feign是一个声明式WebService客户端。使用Feign能让编写Web
Service客户端更加简单,它的使用方法就是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可插拔式的编码器和解码器。SpringCloud对Feign进行了封装,使其支持了Spring
MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

知道这两个基本概念之后,下面我们就开始构建项目,我们只需要对之前的项目进行改造即可。

一)创建项目

1、Customer端的改造
Customer端的改造分为三部分
1)启动类改造
我们打开app-customer-first的AppCustomerFirstApplication类,并添加注解@EnableFeignClients,这个时候会自动引入
import org.springframework.cloud.openfeign.EnableFeignClients;的包,如果没引用,那就说明前面没有按照前面的配置走,Customer的配置请看上一篇
要注意的是application.properties配置文件不动,配置完的项目如图1所示:
在这里插入图片描述
代码如下所示:

@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class AppCustomerFirstApplication {

    public static void main(String[] args) {
        SpringApplication.run(AppCustomerFirstApplication.class, args);
    }
}

2)增加controller
选择com.glen.appcustomerfirst单击右键New→Package,将该包命名为controller,并在该包下面创建AppCustomerFirstController,配置完的项目如图2所示:
在这里插入图片描述
代码如下所示:

@RestController
public class AppCustomerFirstController {
    @Autowired
    private AppCustomerFirstServer appCustomerFirstServer;

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public String test() {
        return appCustomerFirstServer.test();
    }
}

3)增加service
选择com.glen.appcustomerfirst单击右键New→Package,将该包命名为service,并在该包下面创建AppCustomerFirstServer,配置完的项目如图3所示:
在这里插入图片描述
图中的说明:
①:这个Class不要命名错了是server,不是service
②:这个地方的value就是app-server-first中的spring.application.name的值
③:这个地址要和后面的app-server-first中的地址对应起来

代码如下所示:

@FeignClient(value="app-server")
public interface AppCustomerFirstServer {
    @RequestMapping("/test")
    public String test();

}

2、Server端的改造
Server端的改造分为两部分:
1)启动类配置
app-server-first在启动类添加注解@EnableFeignClients和@ComponentScan(“com.glen”)。
配置完的项目如图4所示:
在这里插入图片描述
图中的说明:
①:这个的目的是为了项目可以扫描到包,如果不配置后面启动项目可能出现404
②:这个是Feign的注解方式的Client,相当于我们之前说的把多个单行道联合在一起变成多行道的粘合剂

代码如下所示:

@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class AppServerFirstApplication {
    public static void main(String[] args) {
        SpringApplication.run(AppServerFirstApplication.class, args);
    }
}

2)添加controller。
选择com.glen.appserverfirst单击右键New→Package,将该包命名为controller,并在该包下面创建AppServerFirstController,配置完的项目如图5所示:
在这里插入图片描述
AppServerFirstController代码如下:

@RestController
public class AppServerFirstController {
    @Value("${server.port}")
    String port;

    @RequestMapping("/test")
    public String test(){
        return "Hello,world,恭喜您调用成功了,这个是appServerFirst,port为:" +port;
    }
}

说明:
a   @value是调用该模块中application.properties的属性值的注解方法,具体使用方法可以自己搜索。
b   @RequestMapping是入口,我们在浏览器输入localhost:port/test就可以访问了,具体使用也请自行百度。
c  @RestController这个注解写SpringMVC的都知道,一定要加。

3)增加server
按照创建服务端Server的方法,再创建一个server,命名为app-server-second,项目架构都一样,上面1)中的controller也要有,并将server.port改一下,我这边配置如下图6,启动类要注意也要添加@EnableFeignClients。
在这里插入图片描述
代码如下所示:

server.port=8101
spring.application.name=app-server
eureka.client.service-url.defaultZone: http://localhost:8081/eureka/

同时controller也需要改一下,尤其是return里面的内容
如下图7所示:
在这里插入图片描述
AppServerSecondController代码如下所示:

@RestController
public class AppServerSecondController {
    @Value("${server.port}")
    String port;

    @RequestMapping("/test")
    public String test(){
        return "Hello,world,恭喜您调用成功了,这个是appServerSecond,port为:" +port;
    }
}

二)启动项目

我们依次启动EurekaServerApplication、AppServerFirstApplication、AppServerSecondApplication、AppCustomerFirstApplication四个项目,在注册中心可以看到如图8内容,表示启动成功:
在这里插入图片描述

三)测试项目

在地址栏输入localhost:8200/test,我们会发现如图9内容:
在这里插入图片描述
出现了我们之前在app-server-first的server中写的Hello,world,恭喜您调用成功了,这个是appServerFirst,port为:8100,再次刷新地址栏我们会发现如图10的内容:
在这里插入图片描述
Hello,world,恭喜您调用成功了,这个是appServerSecond,port为:8101这是我们在app-server-second中配置的内容,这样就说明我们的负载均衡做成功了。

SpringCloud从零构建(一)——Eureka注册中心
SpringCloud从零构建(二)——创建服务端Server
SpringCloud从零构建(三)——创建消费者Customer
SpringCloud从零构建(四)——Feign实现负载均衡
SpringCloud从零构建(五)——Config配置中心
SpringCloud从零构建(六)——消息总线Bus+Rabbit MQ实现动态刷新

下一篇讲Config配置中心。
github地址:https://github.com/gjen1996/microservice
如果有问题欢迎小伙伴留言和我沟通交流。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值