ITPub博客

首页 > IT职业 > IT职场 > 负载均衡---ribbon

负载均衡---ribbon

IT职场 作者:mmxnj 时间:2021-09-09 09:33:45 0 删除 编辑

Ribbon:提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用。

上一篇简单讲解了eureka的使用,这一篇文章基于上一篇的基础上,讲一下springcloud的另一个重要的组件ribbon。

这篇文章需要新建三个工程,service(8762),service(8763),service-ribbon(8764),三个服务分别向eureka-server注册中心注册,本文的服务使用的注册中心都是本人创建的测试eureka–http://eureka.dalaoyang.cn。

首先新建一个service(8762),括号内的8762是项目的端口号,加入eureka依赖,pom文件如下:


    4.0.0

    com.dalaoyang
    springcloud_service
    0.0.1-SNAPSHOT
    jar

    springcloud_service
    springcloud_service

    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.9.RELEASE
         <!-- lookup parent from repository -->
    

    
        UTF-8
        UTF-8
        1.8
        Edgware.SR1
    

    
        
            org.springframework.cloud
            spring-cloud-starter-eureka
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    


    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

配置文件

##端口号
server.port=8762

##服务名称
spring.application.name=service

##注册中心地址
eureka.client.service-url.defaultZone=http://eureka.dalaoyang.cn/eureka/

启动类使用注解@EnableEurekaClient向注册中心注册,代码如下:

package com.dalaoyang;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
@EnableEurekaClient
public class SpringcloudServiceApplication {

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


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

    @Value("${spring.application.name}")
    String serviceName;

    @GetMapping("/")
    public String index(){
        return "serviceName=" + serviceName + "-------port=" + port;
    }
}

到这里service(8762)创建完成,然后复制一个项目,端口号改为8763作为service(8763)。

然后新建项目service-ribbon(8764),pom文件加入ribbon依赖,pom完整代码如下:


    4.0.0

    com.dalaoyang
    springcloud_ribbon
    0.0.1-SNAPSHOT
    jar

    springcloud_ribbon
    springcloud_ribbon

    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.9.RELEASE
         <!-- lookup parent from repository -->
    

    
        UTF-8
        UTF-8
        1.8
        Edgware.SR1
    

    
        
            org.springframework.cloud
            spring-cloud-starter-eureka
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.boot
            spring-boot-starter-web
        
        

            org.springframework.cloud
            spring-cloud-starter-ribbon
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

配置文件如下:

##端口号
server.port=8764

##服务名称
spring.application.name=service_ribbon

##注册中心地址
eureka.client.service-url.defaultZone=http://eureka.dalaoyang.cn/eureka/

由于只是一个简单demo,所有我将java代码都写在了启动类里面,解释一下,@LoadBalanced放在RestTemplate上面,表明RestTemplate开启负载均衡。代码如下:

package com.dalaoyang;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableEurekaClient
@RestController
public class SpringcloudRibbonApplication {

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

	@Bean
	@LoadBalanced
	RestTemplate restTemplate() {
		return new RestTemplate();
	}

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

	@Value("${spring.application.name}")
	String serviceName;

	@GetMapping("/")
	public String index(){
		return restTemplate().getForObject("http://service/",String.class);
	}
}

分别启动service(8762),service(8763),service-ribbon(8764)三个工程。
先查看http://eureka.dalaoyang.cn/,可以看到三个实例注册成功。如下图:

图片描述
多次访问http://localhost:8764/,可以看到页面交替显示

图片描述

图片描述
可以看到负载均衡已经做到了。

完整项目流程如下图:

图片描述




来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3316/viewspace-2804722/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-14

  • 博文量
    67
  • 访问量
    652