第五节 微服务OTRS 补充客户端负载均衡

客户端客户端负载均衡使用

spring could在客户端负载均衡有两种选择一种是ribbon+restTemplate,另一种是feign。本主要讲解下基于ribbon+rest。当然feign(Feign默认集成了ribbon)也会简单介绍。

  1. ribbon+restTemplate实现方式 首先需要在项目中添加pom文件中添加依赖
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
  1. 在工程的配置文件指定服务的注册中心地址为同上节eureka client配置相同 ,例如:
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 8764
spring:
  application:
    name: service-ribbon
  1. 在工程的启动类中,通过@EnableDiscoveryClient向服务中心注册;并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明restRemplate开启负载均衡的功能。 例如在api-server项目启动类如下
  @SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker
@EnableResourceServer
@Configuration
@ComponentScan({"com.packtpub.mmj.api.service", "com.packtpub.mmj.common"})
public class ApiApp {
  //................................省略
    @LoadBalanced
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        LOG.info("Register MDCHystrixConcurrencyStrategy");
        HystrixPlugins.getInstance().registerConcurrencyStrategy(new MDCHystrixConcurrencyStrategy());
        SpringApplication.run(ApiApp.class, args);
    }
}
  • 在使用restTemplate向其他服务发送请求就会通过eureka server 通过负载策略代理到相应的服务上。
  • 注意:ribbon中会根据服务名来选择具体的服务实例,根据服务实例在请求的时候会用具体的url替换掉服务名。所以使用的url要用服务名称而不是IP:port这种形式

比如下例子:

@Autowired
    RestTemplate restTemplate;

    public String hiService(String name) {
        return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);
    }
  1. Feign是一个声明式的伪Http客户端,使用Feign,只需要创建一个接口并注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡。
  • 使用的第一步添加依赖
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
  • 第二步 工程配置application.yml,和上述ribbon相同 略
  • 第三步 启动类加上@EnableFeignClients注解开启Feign的功能,例如:
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients
public class AppService{
    public static void main(String[] args) {
        SpringApplication.run( AppService.class, args );
    }
}
  • 第四步 使用 只需要定义一个接口,通过@ FeignClient(“服务名”),来指定调用哪个服务。比如在代码中调用了restaurant-service服务的“/v1/restaurants”,(spring 会替我们实现有@ FeignClient的接口)代码如下:
//定义

@FeignClient("restaurant-service")
interface RestaurantClient {
    @RequestMapping(method = RequestMethod.GET, value = "/v1/restaurants")
    Collection<Restaurant> getRestaurants(@RequestParam("name") String name);
}
//使用
@Autowired
    private RestaurantClient restaurantClient;
// 调用即可
  • 总结: 上述两种方式均为客户端服务在调用,其他服务的请求会先通过eureka server查找已注册的服务根据相应的负载策略,转到具体的服务
  • github 源码地址

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CodingBlock

Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html

1004
来自专栏battcn

一起来学Spring Cloud(F版) | 第三篇:注解式HTTP请求Feign

注解式的 Feign 使得 Java HTTP 客户端编写更方便。Feign 灵感来源于安卓网络编程框架 Retrofit、JAXRS-2.0 和 WebSoc...

1652
来自专栏史上最简单的Spring Cloud教程

史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)

在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Fe...

2567
来自专栏李蔚蓬的专栏

基于VM14+ Ubuntu 16.04安装VMware Tools(VM同主机file交互的工具)以及使用的骚操作

在安装VMware Tools时,需要修改指向VMware Tools所在(VMware Workstation\linux.iso),在这个路径下有个l...

1645
来自专栏javathings

Spring Boot 中的自动配置

SpringBoot 启动的时候,会有大量的自动配置的类加载到容器中。正是因为 SpringBoot 的这些自动配置,使得我们在编程的时候,不像 Spring ...

2822
来自专栏SpringBoot

SpringCloud Feign

版权声明:本文为博主原创文章,未经博主允许不得转载。

3932
来自专栏SpringBoot

SpringCloud Ribbon

Ribbon是一个客户端负载平衡器,它可以很好地控制HTTP和TCP客户端的行为。Feign已经使用Ribbon,所以如果你使用@FeignClient,那么这...

1702
来自专栏Java帮帮-微信公众号-技术文章全总结

Spring-拾遗

Junit集成 前面多次用到@RunWith与@ContextConfiguration,在测试类添加这两个注解,程序就会自动加载spring配置并初始化Spr...

3055
来自专栏代码拾遗

Spring Boot 2.0 教程 - 日志详解

Spring Boot 内部使用commons logging 作为日志输出工具,同时也可以配置其他的工具例如,Java Logging,Log4j2,log...

1674
来自专栏CodingBlock

Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html 在Android...

2896

扫码关注云+社区

领取腾讯云代金券