(Turn) El tutorial de SpringCloud más simple de la historia | Parte 2: Consumidor de servicios (resto + cinta) (versión Finchley)

En el artículo anterior, hablé sobre el registro y el descubrimiento de servicios. En la arquitectura de microservicios, el negocio se divide en servicios independientes y la comunicación entre el servicio y el servicio se basa en http restful. Spring Cloud tiene dos métodos de invocación de servicios, uno es ribbon + restTemplate y el otro es fingido. En este artículo, primero explique la base de cinta + descanso.

1. Introducción a la cinta

Ribbon es un equilibrador de carga del lado del cliente que le da mucho control sobre el comportamiento de los clientes HTTP y TCP. Feign ya usa Ribbon, por lo que si está usando @FeignClient, esta sección también se aplica.

----- Desde el sitio web oficial

ribbon ha implementado estos beans de configuración de forma predeterminada:

  • IClientConfig ribbonClientConfig: DefaultClientConfigImpl
  • Cinta IRule Regla: ZoneAvoidanceRule
  • IPing ribbonPing: NoOpPing
  • ServerList ribbonServerList: ConfigurationBasedServerList
  • ServerListFilter ribbonServerListFilter: ZonePreferenceServerListFilter
  • Cinta de ILoadBalancerLoadBalancer: ZoneAwareLoadBalancer

2. Preparación


Este artículo se basa en el proyecto del artículo anterior, inicie el proyecto eureka-server; inicie el proyecto service-hi, su puerto es 8762; cambie el puerto del archivo de configuración service-hi a 8763, e inícielo, luego will Se encontró que service-hi registró 2 instancias en eureka-server, lo que equivale a un clúster pequeño.

Cómo iniciar varias instancias bajo la idea, consulte este artículo:

https://blog.csdn.net/forezp/article/details/76408139

Visite localhost: 8761 como se muestra en la figura:
å¨è¿éæå ¥ å¾çæè¿ °

Tres, construya un consumidor de servicios

Cree un nuevo proyecto de arranque de primavera y asígnele el nombre: service-ribbon;
su pom.xml hereda el archivo pom principal e introduce las siguientes dependencias:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.forezp</groupId>
    <artifactId>service-ribbon</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>service-ribbon</name>
    <description>Demo project for Spring Boot</description>


    <parent>
        <groupId>com.forezp</groupId>
        <artifactId>sc-f-chapter2</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
    </dependencies>

</project>

La dirección del centro de registro del servicio especificado en el archivo de configuración del proyecto es http: // localhost: 8761 / eureka /, el nombre del programa es service-ribbon y el puerto del programa es 8764. El archivo de configuración application.yml es el siguiente:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 8764
spring:
  application:
    name: service-ribbon

En la clase de inicio del proyecto, regístrese con el centro de servicio a través de @EnableDiscoveryClient; e inyecte un bean: restTemplate en el ioc del programa; y use la anotación @LoadBalanced para indicar que este restRemplate abre la función de equilibrio de carga.

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class ServiceRibbonApplication {

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

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

}


Escriba una clase de prueba HelloService para consumir la interfaz "/ hi" del servicio service-hi inyectando el restTemplate del contenedor ioc antes. Aquí usamos directamente el nombre del programa en lugar de la dirección URL específica. En la cinta, será según el nombre del servicio. Seleccione una instancia de servicio específica y reemplace el nombre del servicio con una URL específica cuando solicite de acuerdo con la instancia de servicio. El código es el siguiente:
 

@Service
public class HelloService {

    @Autowired
    RestTemplate restTemplate;

    public String hiService(String name) {
        return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);
    }

}

Escriba un controlador, use el método de llamar a HelloService en el controlador, el código es el siguiente:


@RestController
public class HelloControler {

    @Autowired
    HelloService helloService;

    @GetMapping(value = "/hi")
    public String hi(@RequestParam String name) {
        return helloService.hiService( name );
    }
}


Visite http: // localhost: 8764 / hi? Name = forezp varias veces en el navegador, el navegador muestra alternativamente:

hola forezp, soy del puerto: 8762

hola forezp, soy del puerto: 8763

Esto muestra que cuando llamamos al método restTemplate.getForObject ("http: // SERVICE-HI / hi? Name =" + name, String.class), hemos realizado el equilibrio de carga y hemos accedido a instancias de servicio de diferentes puertos.

Cuarto, la arquitectura en este momento

å¨è¿éæå ¥ å¾çæè¿ °

  • Un registro de servicios, servidor eureka, puerto 8761
  • El proyecto service-hi ejecutó dos instancias con los puertos 8762 y 8763 respectivamente, que se registraron en el registro de servicios.
  • El puerto de cinta de servicio es 8764, regístrese en el centro de registro de servicios
  • Cuando sercvice-ribbon llama a la interfaz hi de service-hi a través de restTemplate, debido a que la cinta se utiliza para el equilibrio de carga, se llamará a service-hi a su vez: las interfaces hi de los dos puertos 8762 y 8763;


Descarga de la fuente: https://github.com/forezp/SpringCloudLearning/tree/master/sc-f-chapter2

Lee mas

Resumen de los tutoriales de SpringCloud más simples de la historia

Resumen del tutorial de SpringBoot

Resumen de preguntas de la entrevista de Java

Cinco, materiales de referencia

Este artículo hace referencia a lo siguiente:

http://blog.csdn.net/forezp/article/details/69788938

http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html

 

Supongo que te gusta

Origin blog.csdn.net/u014225733/article/details/100537880
Recomendado
Clasificación