资讯专栏INFORMATION COLUMN

一起学习使用Spring Cloud Netflix之Ribbon

nidaye / 2290人阅读

摘要:本例中介绍如何使用来完成服务调用并实现负载均衡。即,对于注册中心而言,生产者和调用者都是端。文件配置如下在文件中,我们将应用命名为,端口为,表示注册中心地址。

前言

Ribbon是Spring Cloud体系中完成负载均衡的重要组件。Spring Cloud体系中有两种完成服务调用的组件,一种是Ribbon+RestTemplate,另一种Feign。Feign默认使用的也是Ribbon组件,将服务间的调用又包装了一层,像调用方法一样的来调用远程服务。本例中介绍如何使用Ribbon+RestTemplate来完成服务调用并实现负载均衡。

本文来源于我的技术博客:http://51think.net

一、创建服务调用者

在Eureka的博客中,我们创建了服务注册中心应用spring-cloud-eureka,创建了服务生成者spring-cloud-eureka-myservice。这次我们将创建一个服务调用者spring-cloud-ribbon-client。
1、POM文件如下



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.6.RELEASE
         
    
    com.example
    spring-cloud-ribbon-client
    0.0.1-SNAPSHOT
    spring-cloud-ribbon-client
    Demo project for Spring Boot

    
        1.8
        Greenwich.SR2
    

    
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            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
            
        
    


从POM文件中可以看出核心组件是spring-cloud-starter-netflix-eureka-client,这个组件在服务生产者应用spring-cloud-eureka-service中也在使用。即,对于Eureka注册中心而言,生产者和调用者都是client端。spring-boot-starter-web用于web交互,稍后我们将通过浏览器来呈现一个helloWorld的调用效果。
2、yml文件配置如下

 eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8010/eureka/
server:
  port: 8020
spring:
  application:
    name: ribbonClient

在yml文件中,我们将应用命名为ribbonClient,端口为8020,defaultZone表示Eureka注册中心地址。

3、申明Eureka client端
在springboot启动类中,添加@EnableEurekaClient注解,以申明此应用是Eureka的一个客户端。
@EnableEurekaClient
@SpringBootApplication
public class RibbonClientApplication {

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

}

4、将负载均衡的bean注入到容器中
RestTemplate可以进行远程调用,@LoadBalanced注解表明这个bean具备负载均衡的功能,默认使用的是轮询机制。

@Configuration
public class ConfigProvider {
    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

5、创建service
使用注入的restTemplate来实现远程调用。

@Service
public class SayHelloService {
    @Autowired
    RestTemplate restTemplate;
    public  String sayHello(String say){
        return restTemplate.getForObject("http://myservice/sayHello?say="+say,String.class);
    }
}

6、创建controller

@RestController
public class SayHelloController {
    @Autowired
    SayHelloService sayHelloService;
    @RequestMapping ("/sayHello")
    public String sayHello(@RequestParam String say){
        return sayHelloService.sayHello(say);

    }
}
二、生产者应用提供服务

在spring-cloud-eureka-myservice应用中,添加controller,提供访问服务:

@RestController
public class HelloServerController {
    @Value("${server.port}")
    String port;
    @RequestMapping("/sayHello")
    public String hello(@RequestParam String say){
            return say+", i com from the server "+port;

    }
}

启动生产者应用spring-cloud-eureka-myservice,然后变更端口,再启动一次,这样生产者就变成双节点了,为后面的负载均衡演示提供条件。

三、启动服务调用者spring-cloud-ribbon-client

启动完成之后,在Eureka面板中,可以看到如下信息:

从图中可以看到两行数据,分别代表两个应用,myservice应用存在两个节点,ribbonclient应用存在一个节点。如果看不到ribbonclient这一行,那要检查一下spring-cloud-ribbon-client应用是否有问题。

四、浏览器访问

在浏览器访问http://localhost:8020/sayHello?say=helloworld,可以看到如下展示

多次访问时会发现端口在交替变化,说明我们实现了负载均衡。

源码地址:https://github.com/huangyubia...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75677.html

相关文章

  • 一起学习使用Spring Cloud NetflixZuul

    摘要:前言在体系中扮演着统一网关的角色,负责与外部交互。与结合使用,可以根据服务名来访问后端的服务,对于而言,也是一个。这段代码表示,如果请求中没有信息,就会报错。 前言 Zuul在Spring Cloud 体系中扮演着统一网关的角色,负责与外部交互。用户可以通过不同的URL特征来访问不同的后端服务,类似于Nginx代理的效果。Zuul与Eureka结合使用,可以根据服务名来访问后端的服务,...

    FullStackDeveloper 评论0 收藏0
  • Spring Cloud 参考文档(客户端负载均衡器:Ribbon

    摘要:客户端负载均衡器是一个客户端负载均衡器,可以让你对和客户端的行为进行大量控制,已经使用了,因此,如果你使用,此部分也适用。 客户端负载均衡器:Ribbon Ribbon是一个客户端负载均衡器,可以让你对HTTP和TCP客户端的行为进行大量控制,Feign已经使用了Ribbon,因此,如果你使用@FeignClient,此部分也适用。 Ribbon中的一个核心概念是命名客户端,每个负载均...

    Songlcy 评论0 收藏0
  • 8、服务发现&服务消费者Feign

    摘要:公众号乐园的中提供了两个组件实现软负载均衡调用,分别是和。是基于和的客户端负载工具,它是基于实现的,它可以在客户端配置服务端列表,然后轮询请求以实现均衡负载。 公众号:java乐园 spring cloud的Netflix中提供了两个组件实现软负载均衡调用,分别是Ribbon和Feign。上一篇和大家一起学习了Ribbon。Ribbon :Spring Cloud Ribbon是基于H...

    lpjustdoit 评论0 收藏0
  • Spring Cloud 快速入门

    摘要:服务注册中心一个服务注册中心,所有的服务都在注册中心注册,负载均衡也是通过在注册中心注册的服务来使用一定策略来实现。在客户端实现了负载均衡。 文章参考于史上最简单的 SpringCloud 教程 | 终章 Spring Cloud 是一个微服务框架,与 Spring Boot 结合,开发简单。将一个大工程项目,分成多个小 web 服务工程,可以分别独立扩展,又可以共同合作。 环境 ...

    fuyi501 评论0 收藏0
  • Spring Cloud实战(三)-Spring Cloud Netflix Ribbon

    摘要:概要什么是实战整合实现负载均衡是什么是一个客户端负载均衡的组件什么是负载均衡负载均衡就是分发请求流量到不同的服务器目前的实现有软件和硬件负载均衡分为两种服务器端负载均衡如上图所示服务器端负载均衡是对客户透明的用户请求到服务器真正的服务器是由 概要 什么是Spring Cloud Netflix Ribbon? 实战:整合Ribbon实现负载均衡 Spring Cloud Netfl...

    wangbinke 评论0 收藏0

发表评论

0条评论

nidaye

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<