Consul+Feign 实现负载均衡

Hi:我是少军,又到了凌晨一点睡不着时间,所以就把白天做的Feign实现负载均衡的代码整理下作为笔记。同时也希望对你的学习有所帮助!

这篇文章主要描述实现Fegin的负载均衡,并不做深层次的介绍。

依赖:

org.springframework.cloud

spring-cloud-starter-consul-discovery

org.springframework.cloud

spring-cloud-starter-openfeign

启动类:

@SpringBootApplication

@EnableFeignClients

public classConsulConsumerFeignApplication {

public static voidmain(String[] args) {

SpringApplication.run(ConsulConsumerFeignApplication.class,args);

}

}

声明开启feign客户端,feign基于ribbon进行了扩展,简化了负载均衡的实现。使应用由Ribbon的面向服务编程转为我们熟悉的面向接口编程!

补充下前面文章提到的的Ribbon配置,可以通过下面的方式构建自带负载均衡的RestTemplate:

@Configuration

public classRibbonConfigBean {

@Autowired

RestTemplateBuilderbuilder;

publicRibbonConfigBean(RestTemplateBuilder builder) {

this.builder= builder;

}

/**

* `@LoadBalanced让restTemplate自带负载均衡,通过应用名称来实现自动负载均衡

*@return

*/

@LoadBalanced

@Bean

publicRestTemplategetRestTemplate(){

returnbuilder.build();

}

}

创建服务提供者对应的接口:

@FeignClient(value="Your App Name")

@Component

public interfaceUserService {

@GetMapping("/users/")

OptionalfindById(@PathVariable(value="id") Long id);

@GetMapping("/users///")

Usersave(@PathVariable(value="id") Long id,@PathVariable(value="name") String name,

@PathVariable(value="dsno") String dsno);

@GetMapping(value="/users/all")

Optional

>findAll();

}

声明此接口为Feign客户端,指定你的服务提供者应用名称(根据不同应用找不同服务提供者的接口)

声明该接口为组建类,可以被Spring容器扫描并自动装载到需要的位置

接口地址要一一对应,填坑(

@PathVariable(value="id")

参数一定要指定value,否则无法将此接口加载到容器中,会抛出异常!

构建服务消费者接口:

@RestController

public classCallHelloController {

@Autowired

privateUserServiceuserService;

@RequestMapping("users/all")

publicOptional

>call(HttpServletRequest request) {

Optional

> all =userService.findAll();

returnall;

}

@GetMapping("/users/")

publicOptionalfindById(@PathVariableLong id){

returnuserService.findById(id);

}

@GetMapping("/users///")

publicUsersave(@PathVariableLong id,@PathVariableString name,@PathVariableString dsno){

returnuserService.save(id,name,dsno);

}

}

相关配置文件(跟之前一样,不需要改变):

spring.application.name=spring-cloud-consul-consumer

server.port=8504

spring.cloud.consul.host=192.168.137.136

spring.cloud.consul.port=8500

#设置不需要注册到consul中

spring.cloud.consul.discovery.register=false

#服务提供之应用名称

rest.url.prefix.url=http://dobqop-consul-service-yml

cloud.producer.name=dobqop-consul-service-yml

以上为本次示例的实现。相比于ribbon,使用feign大大的减少了我们的代码量,取代使用restTemplate后,我们可以更加专注于代码层面的开发,不需要更多的数据转换等优点。

以后随着深入了解我会继续完善这篇文章,详细描述关于使用feign的相关配置。如果你有更好的方案,希望能得到你更多的指导^_^

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20190106G0254100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券