This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
microservicios_en_java [2020/06/19 12:15] admin |
microservicios_en_java [2020/07/27 19:37] (current) 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 | ||
+ | @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 | ||
+ |