diff --git a/backend-deno/samples/docker-compose.yml b/backend-deno/samples/docker-compose.yml index 2a4ca6b1..2980d39f 100644 --- a/backend-deno/samples/docker-compose.yml +++ b/backend-deno/samples/docker-compose.yml @@ -43,6 +43,20 @@ services: environment: - SERVICE_NAME=sample-publisher - DATA_SUBJECT=data.sample + forward-to-logger: + build: + context: ../ + dockerfile: samples/Dockerfile + command: ["requester/mod.ts"] + depends_on: + - nats + env_file: + - .common.env + environment: + - SERVICE_NAME=forward-to-logger + - REQUEST_SUBJECT=latest.data.sample + - FREQUENCY=3000 + - OUTPUT_SUBJECT=log.sample-data logger: build: context: ../ diff --git a/backend-deno/samples/requester/README.md b/backend-deno/samples/requester/README.md new file mode 100644 index 00000000..c90ae4c8 --- /dev/null +++ b/backend-deno/samples/requester/README.md @@ -0,0 +1,13 @@ +# Requester Sample + +This sample shows how to request data from another service. + +In a given frequency, the service will request the value from a given subject (with an empty request) and re-publish it on a different subject. + +## Configuration Options + +| Option | Description | Default | +| ------ | ----------- | ------- | +| `REQUEST_SUBJECT` | The subject to request data from. | (required) | +| `PUBLISH_SUBJECT` | The subject to publish the requested data on. | (required) | +| `FREQUENCY` | The frequency to request data from the `REQUEST_SUBJECT` in milliseconds. | `5000` | diff --git a/backend-deno/samples/requester/mod.ts b/backend-deno/samples/requester/mod.ts new file mode 100644 index 00000000..d21ee36c --- /dev/null +++ b/backend-deno/samples/requester/mod.ts @@ -0,0 +1,27 @@ +import { startService } from "https://deno.land/x/telestion/mod.ts"; +import { z } from "https://deno.land/x/zod@v3.21.4/mod.ts"; + +const { messageBus, config } = await startService(); + +const { FREQUENCY, REQUEST_SUBJECT, OUTPUT_SUBJECT } = z.object({ + FREQUENCY: z.coerce.number().positive().default(5000), + REQUEST_SUBJECT: z.string(), + OUTPUT_SUBJECT: z.string(), +}).parse(config); + +console.log("Request started with config", { + FREQUENCY, + REQUEST_SUBJECT, + OUTPUT_SUBJECT, +}); + +setInterval(async () => { + try { + const data = await messageBus.request(REQUEST_SUBJECT); + console.log("Requester received requested data", data.data); + messageBus.publish(OUTPUT_SUBJECT, data.data); + console.log("Data forwarded to", OUTPUT_SUBJECT); + } catch (e) { + console.warn("Couldn't retrieve data", e); + } +}, FREQUENCY);