Eclipse tiempo de ejecución de configuración SpringCloud (Hoxton + 2.2.4) + Micro Servicios marco para construir un consumidor de servicios de la cinta + RestTemplate

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.Aquí Insertar imagen Descripción

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
Aquí Insertar imagen Descripción

Crear un consumidor de servicios

Aquí Insertar imagen Descripción

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

Aquí Insertar imagen Descripción

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

Aquí Insertar imagen Descripción

  • 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.
Aquí Insertar imagen Descripción

  • 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 .
Aquí Insertar imagen Descripción

  • 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
Aquí Insertar imagen Descripción

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/
Aquí Insertar imagen Descripción
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
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
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

Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción

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
Aquí Insertar imagen Descripción

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
Aquí Insertar imagen Descripción

Publicado 72 artículos originales · ganado elogios 66 · Vistas de 150.000 +

Supongo que te gusta

Origin blog.csdn.net/miaodichiyou/article/details/104242343
Recomendado
Clasificación