客户端负载均衡(Ribbon)六:环境搭建

简介

  Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。

Ribbon 工作原理

    ......

案例搭建

示例代码

 建立ribbon-provider-consumer子工程,对于Robbin,我们不用再去重新添加jar了,因为在eureka中就已经有了。

服务注册中心

 前几节已经演示过,这里就不多讲了,如需要了解请点击进入

服务消费方

application.yml 配置文件

#服务启动端口号
server:
  port: 9001

#服务名称(服务注册到eureka名称)
spring:
  application:
    name: consumer
#客户端注册进eureka服务列表内
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka
    #该应用为注册中心,不会注册自己,默认true
    register-with-eureka: true
    #是否需要从eureka上获取注册信息,默认true
    fetch-registry: true

服务接口

package net.riking.springcloud.consumer.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/user/consumer")
public class UserConsumerController {
    @Autowired
    private RestTemplate restTemplate;

    private static final String REST_URL_PREFIX = "http://PROVIDER";

    @GetMapping("/port")
    public String port() {
        String result = restTemplate.getForObject(REST_URL_PREFIX+"/user/provider/port", String.class);
        return  "消费服务:"+result ;
    }

  

}

启动消费方服务

package net.riking.springcloud.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class AppConsumer {
    public static void main(String[] args) {
        SpringApplication.run(AppConsumer.class, args);
    }

    @Bean
    @LoadBalanced   //如果提供者服务为集群,当在请求时,拥有客户端负载均衡的能力,
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

服务提供方一

application.yml 配置文件

#服务启动端口号
server:
  port: 8001

#服务名称(服务注册到eureka名称)
spring:
  application:
    name: provider

#客户端注册进eureka服务列表内
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka
    #该应用为注册中心,不会注册自己,默认true
    register-with-eureka: true
    #是否需要从eureka上获取注册信息,默认true
    fetch-registry: true

服务接口

package net.riking.springcloud.provider.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.*;


@RestController
@RequestMapping("/user/provider")
public class UserProviderController {

    @Autowired
    private DiscoveryClient client;

    @Value("${server.port}")
    private String  port;

    @GetMapping("/port")
    public String port() {
        return  "调用提供者provider端口号:"+port ;
    }

}

启动提供方服务

package net.riking.springcloud.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient  ///开启对EurekaClient的支持,即:作为Eureka客户端,高版本可省略
public class AppProvider {
    public static void main(String[] args) {
        SpringApplication.run(AppProvider.class, args);
    }

}

服务提供方二

将服务提供者一中application.yml配置文件端口号修改至8002,然后启动服务提供者二

IDEA工具 项目重复启动方式

启动工程后,访问:http://eureka7001:7001/,我们可以看到有两个提供方服务和一个消费方服务注册进eureka中,这时f环境搭建成功,如下图

Ribbon负载均衡验证

 访问http://localhost:9001/user/consumer/port  ,信息如下:

 

 再次访问http://localhost:9001/user/consumer/port  ,信息如下:

 源码分析

         本来想好了自己写,但是看了这篇文章( 点击进入),然后就放弃,对于这篇文章,我感觉清晰明了,如果想深入Ribbon可以看看。 

posted @ 2019-08-15 16:45  空留意  阅读(222)  评论(0编辑  收藏  举报