mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-05-16 08:58:49 +00:00
dc7495e8bd
* Typo corrections * bridge pattern translated to spanish * builder pattern translated to spanish * context-object pattern translated to spanish * converter pattern translated to spanish * dependency injection pattern translated to spanish * factory pattern translated to spanish * factory-kit pattern translated to spanish * factory-method pattern translated to spanish * monostate pattern translated to spanish * multiton pattern translated to spanish * object mother pattern translated to spanish * object pool pattern translated to spanish * property pattern translated to spanish * prototype pattern translated to spanish * registry pattern translated to spanish * step builder pattern translated to spanish * value object pattern translated to spanish * typo corrections and resources urls refactor * grammar corrections * Add image to each pattern --------- Co-authored-by: luismateoh <luismateohm@gmail.com> Co-authored-by: luis.hincapie <luis.hincapie@blankfactor.com>
108 lines
3.6 KiB
Markdown
108 lines
3.6 KiB
Markdown
---
|
|
title: Aggregator Microservices
|
|
category: Architectural
|
|
language: es
|
|
tag:
|
|
- Cloud distributed
|
|
- Decoupling
|
|
- Microservices
|
|
---
|
|
|
|
## Propósito
|
|
|
|
El usuario realiza una sola llamada al servicio del agregador y, a continuación, el agregador llama a cada microservicio relevante.
|
|
|
|
## Explicación
|
|
|
|
Ejemplo del mundo real
|
|
|
|
> Nuestro mercado web necesita información sobre los productos y su inventario actual. Hace una llamada a un agregador
|
|
> servicio que a su vez llama al microservicio de información del producto y al microservicio de inventario del producto que devuelve la
|
|
> información combinada.
|
|
|
|
En palabras sencillas
|
|
|
|
> Aggregator Microservice recopila datos de varios microservicios y devuelve un agregado para su procesamiento.
|
|
|
|
StackOverflow dice
|
|
|
|
> Aggregator Microservice invoca múltiples servicios para lograr la funcionalidad requerida por la aplicación.
|
|
|
|
**Ejemplo programático**
|
|
|
|
Empecemos por el modelo de datos. Aquí está nuestro `Product`.
|
|
|
|
```java
|
|
public class Product {
|
|
private String title;
|
|
private int productInventories;
|
|
// getters and setters ->
|
|
...
|
|
}
|
|
```
|
|
|
|
A continuación, podemos presentar nuestro microservicio `Aggregator` (Agregador de microservicios). Contiene él `ProductInformationClient` (Información del producto del cliente) y él
|
|
`ProductInventoryClient` (Inventario del producto del cliente) de los clientes para llamar a los respectivos microservicios.
|
|
|
|
```java
|
|
@RestController
|
|
public class Aggregator {
|
|
|
|
@Resource
|
|
private ProductInformationClient informationClient;
|
|
|
|
@Resource
|
|
private ProductInventoryClient inventoryClient;
|
|
|
|
@RequestMapping(path = "/product", method = RequestMethod.GET)
|
|
public Product getProduct() {
|
|
|
|
var product = new Product();
|
|
var productTitle = informationClient.getProductTitle();
|
|
var productInventory = inventoryClient.getProductInventories();
|
|
|
|
//Fallback to error message
|
|
product.setTitle(requireNonNullElse(productTitle, "Error: Fetching Product Title Failed"));
|
|
|
|
//Fallback to default error inventory
|
|
product.setProductInventories(requireNonNullElse(productInventory, -1));
|
|
|
|
return product;
|
|
}
|
|
}
|
|
```
|
|
|
|
Esta es la esencia de la implementación de microservicios de información. El microservicio de inventario es similar, simplemente regresa
|
|
recuentos de inventario.
|
|
|
|
```java
|
|
@RestController
|
|
public class InformationController {
|
|
@RequestMapping(value = "/information", method = RequestMethod.GET)
|
|
public String getProductTitle() {
|
|
return "The Product Title.";
|
|
}
|
|
}
|
|
```
|
|
|
|
Ahora llamando a nuestra REST API `Aggregator` devuelve la información del producto.
|
|
|
|
```bash
|
|
curl http://localhost:50004/product
|
|
{"title":"The Product Title.","productInventories":5}
|
|
```
|
|
|
|
## Diagrama de clase
|
|
|
|

|
|
|
|
## Aplicabilidad
|
|
|
|
Utilice el patrón Agregador de microservicios (Aggregator Microservices) cuando necesite una API unificada para varios microservicios, independientemente del dispositivo cliente.
|
|
|
|
## Créditos
|
|
|
|
* [Patrones de diseño de microservicios] (http://web.archive.org/web/20190705163602/http://blog.arungupta.me/microservice-design-patterns/)
|
|
* [Patrones de microservicios: Con ejemplos en Java](https://www.amazon.com/gp/product/1617294543/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=javadesignpat-20&creative=9325&linkCode=as2&creativeASIN=1617294543&linkId=8b4e570267bc5fb8b8189917b461dc60)
|
|
* [Patrones de arquitectura: Descubra patrones esenciales en el ámbito más indispensable de la arquitectura empresarial](https://www.amazon.com/gp/product/B077T7V8RC/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=javadesignpat-20&creative=9325&linkCode=as2&creativeASIN=B077T7V8RC&linkId=c34d204bfe1b277914b420189f09c1a4)
|