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
Last revision Both sides next revision
microservicios_en_java [2020/06/19 12:15]
admin
microservicios_en_java [2020/07/27 19:29]
admin
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 ======
Line 216: 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 248: Line 252:
  
 @RestController declara la clase para servicios rest @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 @WebMvcTest iniciará el contexto de la aplicación wewb. Sólo carga la capa de controladores
 @MockBean indica a Spring @MockBean indica a Spring
Line 254: Line 262:
 @GeneratedValue genera automáticamente un valor para el id @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 @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
 +
 +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.txt · Last modified: 2020/07/27 19:37 by admin