User Tools

Site Tools


microservicios_en_java

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
microservicios_en_java [2020/06/16 19:06]
admin
microservicios_en_java [2020/07/27 19:37] (current)
admin
Line 108: Line 108:
 ====== Modelo SOAP ====== ====== Modelo SOAP ======
  
-Estan pensados para enviar y recibir xml+Estan pensados para enviar y recibir xml.
  
-WSDL Es un formato xml estándar (Lenguaje de descripción del servicio web). Se encuentran los mensajes que se pueden usar, tipos de datos y operaciones+WSDL Es un formato xml estándar (Lenguaje de descripción del servicio web). Se encuentran los mensajes que se pueden usar, tipos de datos y operaciones.
   * Mensaje   * Mensaje
     * Partes (las estructuras complejas tienen un esquema a parte)     * Partes (las estructuras complejas tienen un esquema a parte)
Line 130: Line 130:
   * POST: Añadir información (No es idempotente)   * POST: Añadir información (No es idempotente)
   * PUT: Actualizar información o creación de recursos con un id conocido (es idempotente)   * PUT: Actualizar información o creación de recursos con un id conocido (es idempotente)
 +  * DELETE: Borra un elemento
 +
 +===== Exponer ficheros planos en java con spring boot =====
 +en el directorio src/​main/​resources/​static están expuestos automáticamente
  
 ====== Domain Driven design ====== ====== Domain Driven design ======
-Libro Domain-driven Design: Tackling Coplexity in the Heart of the Sofware(2003) - Eric Evans+Libro Domain-driven Design: Tackling Coplexity in the Heart of the Sofware(2003) - Eric Evans
 Evitar realizar traducciones del lenguaje entre usuario y programadores Evitar realizar traducciones del lenguaje entre usuario y programadores
  
Line 176: Line 181:
  
 ===== Spring Boot ===== ===== Spring Boot =====
-Herramienta que nace con la finalidad de simplificar el desarrollo de Spring Core+Herramienta que nace con la finalidad de simplificar el desarrollo de Spring Core.
  
 Crear proyecto con maven o gradle Crear proyecto con maven o gradle
Line 202: Line 207:
 No hay ficheros de configuración. Únicamente anotaciones. No hay ficheros de configuración. Únicamente anotaciones.
  
-./mvnw package => Crea el paquete ​+  ​./mvnw package => Crea el paquete ​
  
 Añadir dependencia spring-boot-starter-test del pom Añadir dependencia spring-boot-starter-test del pom
  
-./mvnw spring-boot:​run => Ejecuta la aplicación +  ​./mvnw spring-boot:​run => Ejecuta la aplicación 
-java -jar target/​gs-spring-boot-0.1.0.jar => ejecuta la aplicación+  java -jar target/​gs-spring-boot-0.1.0.jar => ejecuta la aplicación
  
 ==== Test Driven Development ==== ==== Test Driven Development ====
Line 215: Line 220:
 La anotación @Test marca que el método se tiene que ejecutar como test La anotación @Test marca que el método se tiene que ejecutar como test
  
-  @SpringRunner dentro de la anotación de junit se crea un puente entre los tests de SpringBoot y Junit+  @RunWith(SpringRunner.class) ​dentro de la anotación de junit se crea un puente entre los tests de SpringBoot y Junit
   @SpringBootTest carga todo el contexto de spring para los tests   @SpringBootTest carga todo el contexto de spring para los tests
   @AutoConfigureMockMvc configura los mocks   @AutoConfigureMockMvc configura los mocks
Line 223: Line 228:
 @SpringBootTest(webEnvironment = SprinbBootTest.webEnvironment.RANDOM_PORT) @SpringBootTest(webEnvironment = SprinbBootTest.webEnvironment.RANDOM_PORT)
 unido a @LocalServerPort levanta un servidor de spring en un puerto aleatorio unido a @LocalServerPort levanta un servidor de spring en un puerto aleatorio
 +
 +Dependencia spring-boot-starter-actuator lo que hace es habilitar urles para hacer comprobaciones. Escribir localhost:​8080/​actuator y aparecen checks. Algunos hay que activar de manera manual
 +
 +
 +==== En eclipse ====
 +
 +Spring Tools 4 (aka Spring Tool Suite 4)
 +https://​start.spring.io/​
 +
 +Tests utilizados por BDD Behavior-Driven Development
 +
 +El @Autowired se puede aplicar a un método. Entonces lo que hace es inyectar dependencias en los argumentos
 +Para lanzar los tests:
 +
 +  mvnw -Dtest=MultiplicationServiceTest test
 +Se encarga de pasar los tests desde línea de comandos
 +
 +El contexto de aplicación de tests de Spring se crea una vez por aplicación,​ no por cada test
 +
 +@RequiredArgsConstructor genera un constructor con los parámetros finales o con restricciones @NotNull
 +
 +@Override en un método es una ayuda visual para el programador
 +
 +@RestController declara la clase para servicios rest
 +
 +
 +Cada método de esa clase se puede anotar con el tipo. @GetMapping equilave a @RequestMapping(method=RequestMethod.GET)
 +
 +@WebMvcTest iniciará el contexto de la aplicación wewb. Sólo carga la capa de controladores
 +@MockBean indica a Spring
 +@NoArgsConstructor(force=true) inicializa todos los valores a nulo, vacío o 0
 +@Entity asocia el nombre de una clase al de una tabla
 +@GeneratedValue genera automáticamente un valor para el id
 +@Column(name= "​xxx"​) establece el nombre de un campo en bbdd a un atributo en java
 +@RequestBody se utiliza para recibir los datos de una petición dentro del cuerpo de la petición
 +@Param se utiliza para recibir los datos de una petición como argumento
 +@PathVariable se utiliza para recibir los datos de una petición dentro de la url
 +
 +Para utilizar estas etiquetas hay que declarar las siguientes dependencias en el fichero pom como alternativa a utilizar las dependencias de spring boot
 +
 +  <​dependency>​
 +  <​groupId>​org.springframework</​groupId>​
 +  <​artifactId>​spring-webmvc</​artifactId>​
 +  <​version>​5.2.1.RELEASE</​version>​
 +  </​dependency>​
 +  <​dependency>​
 +  <​groupId>​org.springframework</​groupId>​
 +  <​artifactId>​spring-web</​artifactId>​
 +  <​version>​5.2.1.RELEASE</​version>​
 +  </​dependency>​
 +  <​dependency>​
 +  <​groupId>​com.fasterxml.jackson.core</​groupId>​
 +  <​artifactId>​jackson-databind</​artifactId>​
 +  <​version>​2.9.8</​version>​
 +  </​dependency>​
 +
 +=== Proyecto web ===
 +
 +Para poder crear una aplicación que escuche conexiones hay que añadir la dependencia
 +  <​dependency>​
 +    <​groupId>​org.springframework.boot</​groupId>​
 +    <​artifactId>​spring-boot-starter-web</​artifactId>​
 +  </​dependency>​
 +
 +Para poder lanzar un servidor tomcat embebido hay que añadir la siguiente dependencia. Esta dependencia no es necesaria si únicamente se quiere tener un servidor web
 +  <​dependency>​
 +  <​groupId>​org.springframework.boot</​groupId>​
 +  <​artifactId>​spring-boot-starter-tomcat</​artifactId>​
 +  </​dependency>​
 +
 +
 +=== Entity ===
 +
 +Para poder utilizar la anotación @Entity hay que añadir la dependencia
 +  <​dependency>​
 +    <​groupId>​org.springframework.boot</​groupId>​
 +    <​artifactId>​spring-boot-starter-data-jpa</​artifactId>​
 +  </​dependency>​
 +
 +====== Arquitectura basada en eventos ======
 +Event driven arquitecture. Los microservicios intercambian mensajes entre sí cada vez que ocurre alguna acción relevante.
 +
 +Se intercambian mediante un bus de eventos (event bus)
 +
 +Los servicios se suscriben a los eventos y reaccionan con ellos.
 +
 +Los eventos son acciones que ya han ocurrido, por ello los nombres son de acciones pasadas.
 +
 +CQRS => operaciones de escrituras en eventos y lecturas síncronas?
 +
 +Proporciona un acomplamiento débil.
 +
 +No se utilizan transacciones ACID. En su lugar hay consistencia eventual.
 +
 +
 +===== RabbitMQ =====
 +Servidor de mensajería que se integra con Spring Boot. Implementa AMQP (Advanced Message Quering Poll)
 +
 +==== Exchange ====
 +Canal al que enviar mensajes (el topic de mqtt)
 +Los topic no son persistentes.
 +Cada microservicio crea su propia cola. No existe topic central (diferencia con JMS)
 +
 +==== Spring AMQP ====
 +Crea desde Java el topic exchange y la cola. No hay servicios centrales.
 +
 +Los servicios no pueden asumir que el servicio estará
 +
 +
 +@Slf4j es una fachada común para usar los logs.
 +
 +Jetty es un servidor web y de aplicaciones de Eclipse. Al estilo Tomcat
 +
 +====== Descubrimiento de servicios ======
 +Consul o Eureka (Stack de Netflix OSS)
 +
 +Service Registry
 +
 +Register Agent
 +
 +Service Discovery Client
 +
 +====== Balanceo de carga ======
 +Eureka y Ribbon
 +
 +https://​tdp.io/​lb-opts
 +
 +====== Enrutamiento con API Gateway ======
 +Zuul
 +
 +====== Patrón circuit breaker ======
 +
 +Evita que fallos de un componente aislado provoque un fallo total en el sistema
 +Hystrix
  
microservicios_en_java.1592327191.txt.gz · Last modified: 2020/06/16 19:06 by admin