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 17:18]
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 166: Line 171:
  
 http://​dddsample.sourceforge.net/​architecture.html http://​dddsample.sourceforge.net/​architecture.html
 +
 +https://​medium.com/​@jonathanloscalzo/​domain-driven-design-principios-beneficios-y-elementos-primera-parte-aad90f30aa35
 +
 +https://​martinfowler.com/​eaaDev/​EventSourcing.html
 +
 +https://​martinfowler.com/​eaaDev/​EventSourcing.html
 +
 +https://​martinfowler.com/​bliki/​CQRS.html
 +
 +===== Spring Boot =====
 +Herramienta que nace con la finalidad de simplificar el desarrollo de Spring Core.
 +
 +Crear proyecto con maven o gradle
 +**Crear en la aplicación**
 +Empaquetar y desplegar la aplicación
 +
 +  * Configuración automática
 +  * Resolución de dependencias
 +  * Despliegue standalone y en contenedores integrados
 +  * Métricas. SpringBoot proporciona métricas (actuators) para consultar el estado de la aplicación
 +  * Extensible mediante plugins
 +
 +@Restcontroller
 +Una clase se puede utilizar desde SpringMVC y puede recibir peticiones web
 +
 +
 +@RequestMapping asigna el patrón de la ulr con el método sobre el que se aplica. anotación @Controller y @ResponseBody
 +
 +
 +@SpringBootApplication es lo mismo que usar 
 +  * @Configuration Marca la clase como origen de definiciones de beans
 +  * @EnableAutoConfiguration Indica a SpringBoot que comience a añadir beans basándose en la configuración de claspath
 +  * @ComponentScan Indica a Spring que busque otros componentes en el mismo paquete
 +
 +No hay ficheros de configuración. Únicamente anotaciones.
 +
 +  ./mvnw package => Crea el paquete ​
 +
 +Añadir dependencia spring-boot-starter-test del pom
 +
 +  ./mvnw spring-boot:​run => Ejecuta la aplicación
 +  java -jar target/​gs-spring-boot-0.1.0.jar => ejecuta la aplicación
 +
 +==== Test Driven Development ====
 +
 +Añadiendo la dependencia spring-boot-starter-test hace que todas las clases que acaben en Test sean candidatos para examinar los métodos de tests que tiene dentro. Esté en el paquete que esté
 +
 +La anotación @Test marca que el método se tiene que ejecutar como test
 +
 +  @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
 +  @AutoConfigureMockMvc configura los mocks
 +  MockMvc proviene de SpringTest. Envia solicitudes HTTP al DispatcherServlet y hacer assert
 +
 +
 +@SpringBootTest(webEnvironment = SprinbBootTest.webEnvironment.RANDOM_PORT)
 +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.1592320716.txt.gz · Last modified: 2020/06/16 17:18 by admin