breve introducción
Plantilla resto
clases básicas de primavera para fines cliente de sincronización, simplifica la comunicación y http servicio y para cumplir con los principios REST, código de programa puede proporcionar una dirección URL a la misma, y el resultado de la extracción. Por defecto, RestTemplate JDK herramienta de conexión HTTP predeterminado dependiente.
Cinta
Cinta Nube Primavera está basado en HTTP y carga del cliente TCP herramienta de equilibrio, que implementa la cinta basada en Netflix. Por el paquete de la nube de Primavera, que nos permite a la plantilla de descanso de fácil orientada a servicios convierten automáticamente a las llamadas de servicio que solicitan el equilibrio de carga del cliente. Cinta Nube Primavera existe en casi todos los servicios de la nube de primavera y la acumulación de micro-infraestructura. Debido a que las llamadas entre micro-servicios, la pasarela API reenvía la petición a otro contenido, sean implementadas por la cinta, incluyendo Feign, se implementa la cinta herramienta también basado.
En la primavera de la nube, la cinta de opciones cuando se utiliza en conjunción con Eureka, la cinta puede ser adquirido de la lista de direcciones del servidor proveedor de servicios de Eureka y el algoritmo de balanceo de carga, seleccione una instancia de proveedor de servicios.
centros de registro de inicio y proveedores de servicios
https://blog.csdn.net/miaodichiyou/article/details/104160284
1, inicie el centro de registro SpringCloud registro de servicios de alta disponibilidad (Eureka) incorporado
2, agregue un controlador en Eureka-proveedor springcloud archivo de proyecto Hi_provider.java, servicios externos "/ hi"
package org.springcloud.eureka.provider;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@EnableEurekaClient
public class Hi_provider
{
public static void main( String[] args )
{
SpringApplication.run(Hi_provider.class, args);
}
@RestController
public class HiController {
@Value("${server.port}")
String port;
@GetMapping("/hi")
public String Home(@RequestParam String name){
return "hi "+name+",This is from serverport:"+port;
}
}
}
Start-tres instancias Eureka-proveedor springcloud, puertos 8001,8002 y 8003, respectivamente
Crear un consumidor de servicios
Agregar archivo dependencias pom.xml
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.springcloud</groupId>
<artifactId>springcloud-root</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>springcloud-ribbon</artifactId>
<name>springcloud-ribbon</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
archivo de configuración Application.yml
spring:
application:
name: springcloud-ribbon
freemarker:
prefer-file-system-access: false
security:
user:
name: admin
password: 123456
server:
port: 8100
eureka:
instance:
hostname: eureka-ribbon.com
instance-id: eureka-ribbon
client:
service-url:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer1.com:8897/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer2.com:8898/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer3.com:8899/eureka/
Modificar C: \ Windows \ System32 \ drivers \ etc \ hosts
127.0.0.1 eureka-ribbon.com
Añadir un comienzo servicio de la clase de los consumidores
- RibbonApplication.java
package org.springcloud.ribbon;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class RibbonApplication {
public static void main(String[] args) {
SpringApplication.run(RibbonApplication.class, args);
}
}
Adición de RESTful API Interface
Call springcloud-Eureka-proveedor de la interfaz API de ejemplo "/ hola", a saber, servicios de consumo. Desde-Eureka-proveedor springcloud tres casos (puerto 8001,8002,8003), esperamos hacer turnan para acceder a las tres instancias cuando se llama, entonces tenemos que RestTemplate y la cinta se combina con equilibrio de carga. Sólo tiene que ser inyectado en el programa contenedor COI un restTemplate de Bean, además @LoadBalanced comentario en este RestTemplate tiempo que combina el equilibrio de carga de la cinta abierta.
- RestTemplateConfig.java
package org.springcloud.ribbon;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
httpRequestFactory.setConnectionRequestTimeout(30000);
httpRequestFactory.setConnectTimeout(30000);
httpRequestFactory.setReadTimeout(30000);
return new RestTemplate(httpRequestFactory);
}
}
Agregar el servicio de servicio al consumidor proporcionada por la instancia proveedor de servicios
Escribir una clase RibbonService en hi llamada a un método de clase () con restTemplate springcloud-Eureka-proveedor de la interfaz API, sin el uso de no modificable (como la dirección IP) en uri, simplemente escriba el nombre del servicio springcloud-Eureka-proveedor .
- RibbonService.java
package org.springcloud.ribbon;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class RibbonService {
@Autowired
RestTemplate restTemplate;
public String hi(String name){
return restTemplate.getForObject("http://springcloud-eureka-provider/hi?name="+name,String.class);
}
}
Nota: url springcloud-Eureka-proveedor getForObject en el programa Eureka-proveedor springcloud (proveedor de servicios) nombre de la aplicación, que se spring.application.name configurado en el archivo de configuración al crear elemento-Eureka-proveedor para springcloud = springcloud-Eureka-proveedor. hi elemento de la interfaz de direcciones (controlador) springcloud-Eureka-proveedor, se solicita el nombre del parámetro.
Crear un controlador, el servicio de llamada a un método
Escribir una clase RibbonController
package org.springcloud.ribbon;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RibbonController {
@Autowired
private RibbonService ribbonService;
@GetMapping("/hi")
public String hi(@RequestParam(required = false,defaultValue = "zhaojq") String name){
return ribbonService.hi(name);
}
}
proyecto springcloud-cinta de inicio
Ver registro de Eureka
Ejecutar el inicio de clases, visita http://eureka-peer1.com:8897/
http://eureka-peer2.com:8898/,http://eureka-peer3.com:8899/ resultados anteriores.
Los ejemplos de servicio al consumidor se ha registrado correctamente.
controlador en la barra de direcciones del navegador para acceder cinta proyecto
En el navegador varias veces para acceder a http: // localhost: 8100 / hi name = zhaojq, ? El navegador mostrará el siguiente turno
Cuando se ha actualizado http: // localhost: 8100 / suplentes navegador hi se pueden encontrar cuando el nombre de puerto = zhaojq? 8001,8002 y 8003, lo que indica que el cliente tiene balanceo de carga y balanceo de carga por defecto de la cinta de votación algoritmo .
balanceo de carga estrategia de la cinta
balanceo de carga estrategia personalizada (política al azar)
Application.yml archivos de configuración de forzado proyecto springcloud-cinta para agregar la siguiente configuración:
# 自定义配置负载均衡策略
Load_Balance:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
Load_Balance dirección de la necesidad de que la carga de trabajo, la estrategia de servicio com.netflix.loadbalancer.RandomRule. Aquí configuramos tácticas azar
Modificar RestTemplateConfig clase de configuración:
@Bean
public IRule ribbonRule() {
return new RandomRule();//实例化与配置文件对应的策略类
}
Modificar RibbonController
package org.springcloud.ribbon;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RibbonController {
@Autowired
private RibbonService ribbonService;
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/hi")
public String hi(@RequestParam(required = false,defaultValue = "zhaojq")String name){
this.loadBalancerClient.choose("Load_Balance");
return ribbonService.hi(name);
}
}
LoadBalancerClient (RibbonLoadBalancerClient es la clase de implementación) durante la inicialización (ejecutar métodos), pasará ILoadBalance (BaseLoadBalancer es la clase de implementación) para obtener la lista de registro de servicio al centro de registro de Eureka, y un envío "ping", para determinar la disponibilidad de los servicios a EurekaClient cada 10 segundos Si cambia o servicio y el número de irregularidad en la disponibilidad previa del servicio se llevó a cabo, a partir de la actualización del registro o re-pull. Con estos LoadBalancerClient lista de registro de servicio, se puede equilibrar la carga basado en iRule específica.
proyecto-cinta springcloud reinicio, visita http://eureka-ribbon.com:8100/hi?name=zhaojq
En la ventana de comando curl http://eureka-ribbon.com:8100/hi, la cinta se ha encontrado para lograr el equilibrio de carga aleatoria estrategia