ilustrar:
Ribbon es un papel en Spring-Cloud como consumidor de servicios, a través del cual el cliente puede consumir los servicios del proveedor de servicios.
Por ejemplo, en este ejemplo, el proveedor de servicios se registra en el centro de registro. El proveedor de servicios proporciona una interfaz de servicio, que devuelve una cadena de saludo. Llamamos a esta interfaz a través de la cinta y luego obtenemos el servicio del proveedor de servicios sin exponer la dirección del proveedor de servicios real.
premisa:
Siga los tutoriales anteriores para construir un centro de registro y un proveedor de servicios. Puede usar un centro de registro fragmentado aquí o no puede usarlo. Esto se establece temporalmente para ser un centro de registro fragmentado que se estableció antes de usar, y el proveedor de servicios solo puede proporcionar uno.
Preparación:
1. Inicie el centro de registro
Según el tutorial anterior, use Peer1 y Peer2 para iniciar el centro de registro de dos fragmentos. Si es un solo nodo, puede iniciar directamente el proyecto.
Después del inicio, puede consultar localhost: 1111 o localhost: 1112, como se muestra en la figura
2. Inicie el proveedor de servicios
Para ver la situación de equilibrio de carga, dos proveedores de servicios deben iniciarse
Según el tutorial anterior, dos terminales están habilitados para iniciar los puertos especificados (dos servicios idénticos también pueden configurar diferentes puertos en sus respectivos archivos de configuración). Las dos instrucciones terminales son las siguientes:
CD TargetJava -Jar SpringClouddemo-0.0.1-Snapshot.jar --server.port = 8080
CD TargetJava -Jar SpringClouddemo-0.0.1-Snapshot.jar --server.port = 8081
Resultados de inicio:
En este punto, los preparativos se han completado
texto:
1. Construcción del servicio de cinta
Cree un nuevo proyecto Maven sin usar la plantilla. El proyecto se llama Robbin-Customer, y las dependencias de importación se hacen referencia de la siguiente manera:
<? xml versión = "1.0" encoding = "utf-8"?> <Project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschemainstance" 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> <grupo> com.hellxz </groupid> <artifactid> <versión> 1.0-snapshot </versión> <-parent> <grupoD> org.springframework.boot </proupid> <artifactid> spring-boot-starter-parent </artifactid> <versión> 1.5.9.release </version> <lelativePath/> </parent> <dependency> <Ententency> <ProupId> org.springfringFrame.work.work.work. <artifactid> spring-boot-starter-web </artifactid> </pepertency> <epardency> <uproupid> org.springframework.cloud </proupid> <artifactid> spring-cloud-starter-eureka </artifactid> <version> lanzamiento </sersion> </dependency> <defepentency> <grupe> org.spreingfringfringfreka.cloud </groupid> <artifactId>spring-cloud-starter-ribbon</artifactId> <version>RELEASE</version> </dependency> </dependency> </dependency> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>RELEASE</version> <scope>import</scope> <proy> pom </pype> </pendency> </dependencias> </pendencs> </pepertencymanagement> </jecter>
Cree una nueva clase de inicio de SpringBoot y entregue el RestTemplate al contenedor de resorte para la administración
paquete com.cnblogs.hellxz; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; import org.springframework.cloud.client.discovery.enabledClient; import; org.springframework.cloud.client.loadbalancer.loadbalanced; import org.springframework.context.annotation.bean; import org.springframework.web.client.resttemplate;/*** @author: hellxz* @Description: aplicación de consumidores* @date: 2018/4/16 15:45 */ @Habilitados en la clase de customerApplication {@Bean // admite este bean al contenedor de resorte @loadBalanced // Habilitar el equilibrio de carga a través de esta anotación RESTTEmplate RestTeMplate () {return New RESTTEmplate (); } public static void main (string [] args) {springapplication.run (customerApplication.class, args); }}Cree una aplicación.yml en el directorio SRC/recursos para la información de registro de configuración. Este artículo utiliza un centro de registro fragmentado. Configure una defaltzone para un solo nodo.
servidor: puerto: 9000 #Specify el puerto de servicio para la cinta-customer resorte: aplicación: nombre: cinta-customer #pecify el nombre de la aplicación #specify la dirección del centro de registro de eureka Eureka: Client: ServiceUrl: Defaultzone: http: // peer1: 1111/eureka/, http: //
Cree un CustomerController en el directorio de clases de inicio, inyecte RestTemplate para llamar a la interfaz de servicio
paquete com.cnblogs.hellxz; import org.springframework.beans.factory.annotation.aUtowired; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.bind.annotation.restController; import org.springframework.web.client.resttemplate;/** * @author: hellxz * @Description: Application de consumo * @Date: 2018/4/16 15:54 */ @RestollerPublicer Classics Customer RestTemplate private RESTTMPLATE RESTTEmplate; @RequestMapping (value = "/Ribbon-Customer", método = requestmethod.get) public String hellocustomer () {// comentado aquí porque lo sacé de la interfaz del proveedor de servicios de acceso de cadena recta antes, por lo que el resultado no se devolverá, y se informará un error // regresar/ RestTemplate.getForEntity ("http: // localhost: 8080/hello", string.class) .getBody (); // Use RestTemplate para llamar a la interfaz de microservicio return return ResttEmplate.getForSentity ("http: // hello-service/hello", string.class) .getBody (); }}Nota: La línea 24 del código anterior ofrece una demostración de error. Si se produce un error al acceder a la interfaz de la cinta y aparece una página de error blanco, consulte aquí
En este punto, la aplicación de consumidor de cinta se construye y la prueba se inicia
prueba:
Visite http: // localhost: 1111/Descubrimos que esta solicitud de consumidor de cinta se ha registrado en el centro de registro
Visite http: // localhost: 9000/cinta-customer
Recuerde que si hay acceso en el proyecto de proveedor de servicios, la información se imprimirá, porque se han iniciado dos proveedores de servicios, aquí puede probar el equilibrio de carga de la cinta.
Ver salida del proveedor de servicios
El segundo terminal no lo hace, y todavía se muestra en los puntos finales de resolución de Eureka a través de la línea de configuración
Actualice la página para ver el terminal. Dado que la implementación de equilibrio de carga predeterminada de Ribbon está encuestada, puede ocurrir para acceder al mismo servicio varias veces. Actualice la página varias veces, y definitivamente se mostrará en otro término.
Conclusión:
Como consumidor de servicios, Ribbon no puede exponer la dirección de la interfaz al usuario al obtener los servicios proporcionados por el proveedor de servicios. Se puede ver que al llamar a la interfaz de servicio aquí, el nombre del servicio del proveedor de servicios se usa en lugar del nombre del host. Esta característica es muy importante en el Marco de Gobierno de Servicios.
Como aprendí primero el generador Jhipster, me gustaría predecirlo de antemano y luego habrá una tecnología llamada Feign que puede reemplazar la cinta. Esta serie de blogs son todas las notas de estudio. En la operación real, puede haber una situación en la que una aplicación sea tanto un proveedor de servicios como un consumidor de servicios.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.