Docuemntacion del uso del servicio

This commit is contained in:
2025-12-31 10:18:22 +01:00
parent c451230719
commit 0096a8d349
3 changed files with 112 additions and 2 deletions

102
README.md
View File

@@ -27,3 +27,105 @@ Webhooks Soportados:
- [ ] orders/delete - [ ] orders/delete
Propuestas: Propuestas:
## Requisitos
- Docker (linux) o Docker desktop (widows - WSL)
- Ubuntu 24 o similar
## Introduccion
El objetivo es tener un grupo compose con
- Una BDD para almacenar ejemplos
- Un servicio que envie peticiones periodicamente
Este grupo tiene definida una red externa en el `docker-compose.yaml` que
tiene que coincidir con la red de los demás compose ejecutados, por ejemplo:
```yaml
# Esto tiene que aparecer en el yaml del simulador
name: p-simulador-webhooks
networks:
default:
name: network-test # Tiene que coincidir con el compose objetivo
external: true
```
```yaml
# Esto en el yaml del microservicio
name: sf-shopify-orders
networks:
default:
name: network-test
```
### Ejecución
Para lanzar los contenedores se ejecuta el script `run.local.sh` que va a lanzar
el compose de la carpeta `/development/local`. Habrá que ver para los demás entornos.
### Configuración de envío periódico de webhooks
La configuración de los webhooks se hace en `/src/config/initial_hosts.ts`.
En la constante `INITIAL_EVENTS` están los eventos que se van a emitir periodicamente.
Tienen la estructura:
```ts
export type ScheduledEvent = {
topic: string;
numberOfMessages?: number;
periodMs?: number;
};
```
Un ejemplo sería:
```ts
{
topic: "order/create", // Emite mensajes de tipo order/create
numberOfMessages: -1, // Un numero negativo o indefinido de mensajes, indica que se mandan ilimintados
periodMs: 5000 // 5s entre mensajes, si fuese indefinido el predefinido es 1s
}
```
> El periodo indica el mínimo entre mensajes, puede pasar mas tiempo si la maquina se
> realentiza o si el event loop queda bloqueado.
### Configuración de los host que reciben webhooks
Para añadir un host nuevo se crea un nuevo objeto en la constante `INTIAL_HOSTS` tal que:
```ts
type InitialHost = {
topic: string;
host: string;
port: string;
endpoint: string;
method: "POST" | "PUT" | "DELETE";
secretkey: string;
};
```
Por ejemplo si corremos el servicio en un contenedor llamado `cliente-webhooks`
se tiene que añadir un objeto:
```ts
{
topic: "order/create",
host: "localhost",
port: "3500",
endpoint: "/order/create",
method: "POST",
secretkey: webhooksConfig.apiSecret || "1234",
}
```
Esta configuración implica que ese host va recibir una petición HTTP cada vez que
se emite un mensaje con el topic `order/create`, se va a enviar al puerto `3500`
y al endpoint `order/create` mediante el método `POST`. Tiene un campo
"opcional" para la clave para la firma HMAC, si se quiere usar tiene que
coincidir en el cliente y el servidor, la clave del servidor se puede guardar
en el .env o directamente en el objeto **NO SE DEBEN USAR CLAVES REALES DE PRODUCCIÓN**,
con poner "1234" en los dos servicios la firma ya se hace correctamente.

View File

@@ -38,4 +38,4 @@ services:
interval: 10s interval: 10s
retries: 5 retries: 5
start_period: 30s start_period: 30s
timeout: 10s timeout: 10s

File diff suppressed because one or more lines are too long