Mais adequado para iniciantes inexperientes SpringCloud Tutorial carga 6-Ribbon equilíbrio "versão F"

versão SpringCloud: Versão Finchley.SR2 SpringBoot: 2.0.3.RELEASE Fonte endereço: https: //gitee.com/bingqilinpeishenme/Java-Tutorials

prefácio

Escrever um blog mais de um mês, atualizações intermitentes, parceiros hoje têm pequenos lembretes atualizado, muito feliz que eu share é significativa.

Desde então, atualização, e também para o caminho da série mudou uma criança nome de "o mais adequado entrada SpringCloud tutorial"

Por artigos anteriores no código terá três projectos, nomeadamente duas de registo e um cliente, como mostrado abaixo:

Hoje será na base deste código:

  1. O eureka-client-8803 como um provedor de serviços
  2. Por IDEA eureka-client-8803 começou em 8803 e 8804 portas, conjunto provedor de serviço analógico
  3. Em seguida, criar um consumidor de serviço eureka-consumer-8805
  4. Permitir que os consumidores prestadores de serviços através de chamadas de serviço e serviço de chamada de balanceamento de carga.

Dicas: necessidade RestTemplate para saber mais sobre o uso de SpringBoot 17- tutorial gráfico para começar a usar o guia vai RestTemplate "Get Post" "Definir o cabeçalho de solicitação"

Serviço de cluster Provedor de execução, criar um consumidor de serviço

Os prestadores de serviços escrever Controller Interface

Escrevendo uma classe TestController um provedor de serviços em eureka-client-8803

package com.lby.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
* @author luxiaoyang
* @create 2020-04-02-20:13
*/
@RestController
public class TestController {

/**
* @Value("${server.port}") 读取application配置文件中的值
* 赋值到成员变量上
*
* ${server.port} 参数为 application配置文件中的key
*/
@Value("${server.port}")
private String port;

/**
* @RequestParam 获取Request参数的 用于RestFul风格中
* @PathVariable 获取路径中的参数
*/
@GetMapping("showImgById")
public String showImgById(@RequestParam("id") Integer id){
return "查询到id为:"+id+"的信息,使用端口号为:"+port;
}

}

复制代码

IDEA em 8803 e 8804 pelo número da porta para iniciar o prestador de serviços "trunking analógico"

IDEA é um projeto iniciado por padrão em um único caso, que um projeto só pode começar uma vez em um número de porta. Mas, na verdade, IDEA suporta múltiplas instâncias de um projeto pode ser iniciado muitas vezes modificando o número da porta.

Para eureka-client-8803, por exemplo

1. Modificar o eureka-client-8803 é fornecido para iniciar IDEA

Diferentes versões do IDEA, também aparece na configuração mostrada na FIG.

2. Em 8803 o número da porta para iniciar o projeto

3.不要关闭 8803 这个服务,然后直接修改yml中的端口号为8804,再次通过启动类启动

通过以上步骤,就启动了两个服务提供者,用来模拟集群,效果如下

创建服务消费者 eureka-consumer-8805

根据之前教程中的步骤,再创建一个客户端eureka-consumer-8805作为消费者

pom配置

 <dependencies>
<!-- Eureka 客户端的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<!-- web的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- 测试的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
复制代码

application配置文件

server:
port: 8805

#指定当前服务的名称 会注册到注册中心
spring:
application:
name: eureka-consumer-8805

# 指定 服务注册中心的地址
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8801/eureka,http://localhost:8800/eureka
复制代码

启动类

package com.lby;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
* @author luxiaoyang
* @create 2020-04-02-20:43
*/
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaConsumer8805 {
public static void main(String[] args) {
SpringApplication.run(EurekaConsumer8805.class,args);
}
}

复制代码

服务调用和负载均衡

Ribbon负载均衡

Ribbon是一个基于HTTP和TCP的客户端负载均衡工具。

Ribbon是Netflix发布的开源项目,主要功能是提供客户端的负载均衡算法。

关于Ribbon的简介,有一个名词需要进行解释,客户端负载均衡? 负载均衡是一种非常常见的技术,例如:Nginx,F5。

对于Nginx来说,在Nginx中存储一份服务端的清单,用户的请求到达Nginx之后,Nginx会根据负载均衡策略从服务清单中选择一台服务器去处理客户端的请求。 服务清单存储在负载均衡服务中,这就是服务端负载均衡。 而客户端负责均衡,例如Ribbon,本身是不存储可用服务清单的,需要服务清单的时候通过服务节点找注册中心获取。

服务消费者 eureka-consumer-8805 中通过RestTemplate+Ribbon调用服务提供者

RestTemplate+Ribbon的配置

1.在服务消费者 eureka-consumer-8805中导入Ribbon的依赖

<!--ribbon-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
复制代码

2.在启动类中写RestTemplate+Ribbon的配置

演示Ribbon负载均衡的效果

1.在消费者中创建接口 通过RestTemplate调用服务提供者

package com.lby.controller;

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

/**
* @author luxiaoyang
* @create 2020-04-02-20:49
*/
@RestController
public class ConsumerController {

@Autowired
private RestTemplate restTemplate;

/**
* 调用服务提供者
*/
@RequestMapping("/consumer/showConsumer")
public String showConsumer(){
/**
* 通过Ribbon 发送服务调用 用的是RestTemplate
* RestTemplate 本身没有负载均衡的能力
*
* 注意:RestTemplate请求地址中写的不是 ip+端口号 而是被调用服务的服务名称
*/
String object = restTemplate.getForObject("http://eureka-client-8803/showImgById?id=1", String.class);

return "查询到服务提供者的数据,"+object;
}
}

复制代码

注意:RestTemplate请求地址中写的不是 ip+端口号 而是被调用服务的服务名称

2.重启所有的服务,两个服务提供者,一个服务消费者

3.访问服务消费者的接口

请求地址:http://localhost:8805/consumer/showConsumer 可以看到每次请求端口号不一样

总结

以上就是RestTemplate+Ribbon的负载均衡的基本使用

  • RestTemplate负责服务调用
  • Ribbon实现负载均衡

源码地址:https://gitee.com/bingqilinpeishenme/Java-Tutorials

恭喜你完成了本章的学习,为你鼓掌!如果本文对你有帮助,请帮忙点赞,评论,转发,这对作者很重要,谢谢。

要掌握SpringCloud更多的用法,请持续关注本系列教程。

求关注,求点赞,求转发

欢迎关注本人公众号:鹿老师的Java笔记,将在长期更新Java技术图文教程和视频教程,Java学习经验,Java面试经验以及Java实战开发经验。

Acho que você gosta

Origin juejin.im/post/5e85e165f265da47c35d7096
Recomendado
Clasificación