Los primeros artículos se centran principalmente en el uso de Eureka en el centro de registro. A continuación, puede crear un proveedor de servicios para registrarse con Eureka.
Vea el código fuente de demostración: https://github.com/ryan-miao/spring-cloud-edgware-demo/tree/master/provider-demo
Para facilitar el control de versiones, los próximos proyectos se configuran en función de la configuración principal https://github.com/ryan-miao/spring-cloud-edgware-demo.
Crea un proveedor de niños de niños
Cree un módulo infantil con el proveedor de nombres del proyecto-Demo. Complete las dependencias de Springboot y SpringCloud
<Spendencies> <!-SpringBoot Dependency Start-> <Spendency> <MoupRoMID> org.springframework.boot </proupid> <artifactid> spring-boot-starter-web </artifactid> </dependency> <pendency> <grupo) </pendency> <epardency> <uproupid> org.springframework.boot </proupid> <artifactid> spring-boot-devlools </artifactid> <pectional> true </pectional> </pendency> <pendency> <proupid> com.fasterxml.jackson.datatype </proupid> <artifactid> jackson-datatype-jsr310 </artifactid> </pendency> <paperidency> <MoupRoD> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-eureka </artifactid> </dependency> <!-torting boot dependency-> <pendency> <proupid> io.springfox </dependency> </dependence> <!-Dependencia de SpringBoot-> <pendency> <MoupRid> IO.SPRINGFOX </Dependency> <artifactId>springfox-swagger2</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> </dependency> <!--Tool class start--> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </pendency> <pendency> <uproupid> org.projectlombok </proupid> <artifactid> lombok </artifactid> <pectional> true </opcional> </dependency> <epardency> <proupid> net.logstash.logback </groupid> <shifiCactId> logstash-logback- egoder </artifactid> <///deportency>--Taxsfond--Tailifes </dependencias>
spring-boot-starter-web proporciona capacidades web, spring-boot-starter-actuator proporciona estadísticas de proyecto y punto final de monitoreo básico. Si desea utilizar el monitoreo Spring-Boot-Admin, debe agregar el modo de desarrollo spring-boot-devtools jackson-datatype-jsr310 puede resolver el nuevo tiempo de Java8 Apilocaldato Desintegración de spring-cloud-starter-eureka Eureka Cliente, responsable de mantener el corazón y registrarse swagger proporciona un contrato descansado lombok Parece una refrescante herramienta de Getter Setter de nivel de compilación. La gran y completa Biblioteca de clases esencial de guava logstash-logback-encoder quiere recopilar registros para alces, use este apéndice
Clase de inicio
@HabilitadoCloveryClient@springBootApplicationPublic Class ProviderDemoApplication {public static void main (string [] args) {springApplication.run (ProviderDemoApplication.class, args); }} @EnableDiscoveryClient para habilitar el registro del servicio
Esta aplicación de proveedores debe colocarse en la capa más externa del paquete del proyecto, porque @SpringBootappliatin contiene la anotación de @ComponentsCan, y el escaneo predeterminado se escanea en este paquete de clase, de lo contrario, el escaneo debe especificarse manualmente.
Pavonearse
Swagger es una clase de configuración
@Habilswagger2@ConfigurationPublic Class swaggerConfiguration {private apiInfo apiInfo () {return new APIInfobuilder () .title ("API del proveedor de servicios") .Description ("Proporcionar consulta de información del usuario") .tersoSofServiceUrl ("") .Version ("1.0.0") .Build (); } /*** Defina la configuración API. */ @Bean public Docket api () {return New Docket (documentationType.swagger_2) .select () .APIS (requestHandLerLectors.WithClassAnnotation (api.class)) .Build () .ApiInfo (apiInfo ()); }}Para el enrutamiento de la página Swagger, necesitamos guiar lo siguiente:
Crear un controlador para navegar
@ControllerPublic Class Homecontroller {@getMapping (valor = {"/api", "/"}) public String api () {return "redirect: /swagger-ui.html"; }}Tomemos una interfaz de controlador
@Api@RestController@RequestMapping("/api/v1/users")public class UserController{ private List<User> users = Lists.newArrayList( new User(1, "Tan Haoqiang", 100, LocalDate.now()), new User(2, "Yan Weimin", 120, LocalDate.now()), new User(3, "Tan Haoqiang", 100, localDate.Now ()), nuevo usuario (4, "James Gosling", 150, localDate.Now ()), nuevo usuario (6, "Doug Lea", 150, localDate.Now ())); @Getmapp ("/") Lista pública <Servo> List () {return users.stream () .map (u -> new Uservo (U.getID (), u.getName (), u.getage (), u.getBirth ())) .collect (coleccionadors.tolist ()); }}Algunas configuraciones de entorno simples
Application.yml
Spring: Aplicación: Nombre: Proveedor-Demo Jackson: Serialización: Write_Dates_AS_Timestamps: False predeterminado-property-inclusión: Configuración de tiempo de vencimiento del servidor Non_Null#Servidor. Si el latido no se recibe después de este tiempo, Eurekaserver eliminará esta instancia. Tenga en cuenta que Eurekaserver debe establecer eureka.server.Eviction-Interval-Timer-in-MS, de lo contrario, esta configuración no es válida. Esta configuración es generalmente tres veces la configuración de tiempo de actualización del servicio. #Default 90seureka.instance.lease-expiration-duation-in-segundos: 15 #El servicio actualiza la configuración de tiempo, y los latidos del corazón estarán activos cada vez esta vez #default 30seureka.instance.lease---renowal-interval-in-seconds: 5server: port: 8082springfox: documentación: swagger: v2-interval-in-seconds: 5server: port: 8082springfox: documentación: swagger: v2-interval-in-seconds: 5Server: Port: 8082Springfox: Document: Swagger: v2: /Swagger-Resources /API-Docslog: ruta: registros
aplicación-dev.yml
Gestión: Seguridad: habilitada: falseseeureka: Cliente: ServiceUrl: Defaultzone: http: // localhost: 8761/eureka/logstash: url: localhost: 4560
Necesito mencionarlo aquí que, dado que integro logstash, debo instalar Logstash, ver alce para la introducción. Por supuesto, puede omitirlo, siempre y cuando no proporcione la configuración logback.xml, puede eliminar el registro de registro en la dependencia.
Configuración de registro
Logback se usa como marco de registro de forma predeterminada. La configuración simple es la siguiente. Para aquellos que no quieren usar Logstash, simplemente elimine el Appender Logstash.
Cree un nuevo logback-spring.xml en recursos
<? xml versión = "1.0" encoding = "utf-8"?> <Configuration scan = "true" scanPeriod = "60 segundos" debug = "false"> <springproperty scope = "context" name = "appname" fuente = "Spring.Application.NeNEntValue" Defautvalue = "Desconocido"/> <SpringProperty Scope = "context" Name = "Name =" Logath "Logath" Source " defaultValue = "logs"/> <springproperty scope = "context" name = "logstashurl" fuente = "logstash.url" defaultvalue = "localhost: 4560"/> <include recource = "org/springFramework/boot/logging/logback/base.xml"/> <!-Salida a cútilización-> <Appender name = "consolte" consolte "consolutor" consolutor "Ceptor". <Pather> %D {HH: MM: ss.sss} %x {req.remotehost} %x {req.requesturi} $ {appname} [ %thread] %-5Level %logger {36}- %msg %n </matter> </encoder> </apender> <!-Salida a archivo-> <Appender n. <FileMePattern> $ {log.path}/$ {appname}.%d {aayyyy-mm-dd} .log </filenamePattern> </rollingpolicy> <coder> <mattern>%d {hh: mm: ss.sss} $ {appName}%x {req.remoteHost}} %X {req.requesturi} %x {req.useragent} %x {req.method}-[ %hilo] %-5Level %logger {36}- %msg %n </motly> </encoder> </appender> <!-salida a logstash-> <name de apénero = "logstash"> <setinate> $ {{/{/encoder <Encoder charset = "utf-8"/> </ppender> <springprofile name = "dev"> <root nivel = "info"> <appender-ref ref = "console"/> <appender-ref ref = "file"/> <appender-ref ref = "file"/> <appender-ref ref = "file"/> <appender-ref ref = "logstash"/>>>> </>> </springprofile/</sprlePROFILE/</sprlePROFIL <springprofile name = "test, pro"> <root nivel = "info"> <appender-ref ref = "file"/> <appender-ref ref = "logstash"/> </ root> </ springprofile> </figuration>puesta en marcha
Asegúrese de que se haya iniciado Eureka, el administrador es mejor para comenzar, a fin de facilitar la visualización del estado de la aplicación, y el sistema de registro de Elk también está mejor disponible. Por supuesto, solo Eureka es una necesidad.
Compilar y empaquetar
MVN Clean Install Package Spring-Boot: reempaquetado
Ejecute el método principal, especifique el perfil como desarrollo, puede editar la configuración de ejecución en idea y agregar parámetros
--spring.profiles.active = dev
O iniciar el frasco de la línea de comando
Copie el código de la siguiente manera: java -xms256m -xmx1g -xx:+useg1gc -jar ./target/provider-demo-0.0.1-snapshot.jar --spring.profiles.active = dev
Después del inicio, Access Eureka
Visitar administrador
Visite el proveedor-Demo
Exponga nuestra API al consumidor
Dado que hay proveedores de servicios, debe ser para el consumo del consumidor. ¿Cómo deben consumirse los consumidores? Simplemente llame a esta solicitud HTTP manualmente. El contrato Restful Swagger mencionado anteriormente son los parámetros y requisitos proporcionados por el proveedor de servicios para solicitar acceso. Si el consumidor desarrolla este cliente manualmente, llevará mucho tiempo y propenso a los errores. Por lo tanto, como proveedor de servicios, debe proporcionar SDK o cliente al consumidor para su uso.
En el sistema Spring Cloud Technology, las llamadas remotas son naturalmente la principal prioridad. El uso específico que he encontrado es Feign+Ribbon+Hystrix.
A través del acoplamiento de la interfaz declarativa de Feign, se implementa las llamadas al consumidor al proveedor. Equilibrio de carga del cliente de cinta, Hystrix es un interruptor de circuito saludable.
Aquí, primero debemos proporcionar la interfaz de Feign.
Refina la API del controlador en una interfaz. Primero, creamos un nuevo proyecto
https://github.com/ryan-miao/spring-cloud-edgware-demo/tree/master/provider-api
Ponga este proyecto en la lista de dependencias de proveedor-demo
<
Salga del canal de la interfaz de UserApi en el proyecto Provider-API
@RequestMapping ("/API/V1/Users") Public Interface UserApi {@getMapping ("/") List <Servo> List ();}El controlador de proveedor-demo se modifica de la siguiente manera
@Api@RestControllerpublic class UserController implements UserApi { private List<User> users = Lists.newArrayList( new User(1, "Tan Haoqiang", 100, LocalDate.now()), new User(2, "Yan Weimin", 120, LocalDate.now()), new User(3, "Tan Haoqiang", 100, LocalDate.Now ()), nuevo usuario (4, "James Gosling", 150, localDate.Now ()), nuevo usuario (6, "Doug Lea", 150, localDate.Now ())); @Override Public List <Servo> list () {return users.stream () .map (u -> new Uservo (U.getID (), U.getName (), u.getage (), u.getBirth ())) .collect (coleccionista.tolist ()); }}De esta manera, el controlador no ha cambiado, pero ha sido sacado de la ruta API. El proveedor de módulo independiente-API es el cliente que proporcionamos al consumidor. La siguiente sección utiliza el consumidor para consumir.
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.