Skip to content
Weik.io
Book a demoTry Weik.io

Events

An integration publishes an event to a channel with one line of YAML, and another integration reacts to it with one line. Weik.io stores each event for 30 days, and a reader that was stopped receives what it missed when it starts again. Event sources bring events in from queues, buckets, webhooks and folders, and a channel with a type delivers them to Slack, S3, SFTP, Kafka, JMS or HTTP. Change tracking publishes database changes from PostgreSQL, MySQL, SQL Server, Oracle, MongoDB and DB2.

Terminal
$ weikio events list finance/invoice-created --env production --since 1h
SEQ     STREAM   TIME                      FAMILY   SOURCE                       AGENT         BYTES   RESEND OF
48211   events   2026-09-16 13:02:11 UTC   ev       finance/erp-invoice-export   agent-fi-02   1204    -
48212   events   2026-09-16 13:03:11 UTC   ev       finance/erp-invoice-export   agent-fi-02   1187    -
48213   events   2026-09-16 13:04:40 UTC   ev       finance/invoice-files        agent-fi-02   2310    -

Publish and react

finance/erp-invoice-export publishes each invoice the ERP has accepted to the channel invoice-created in its last step, and finance/invoice-notify starts from that channel. The two integrations refer only to the channel and never to each other, and more readers can join it later without a change to the publisher.

finance/channels/invoice-created.yaml
apiVersion: weik.io/v1
kind: event-channel
metadata: { name: invoice-created, project: finance }
spec:
  description: One event per invoice created in the ERP, JSON body
finance/erp-invoice-export/routes/export-invoices.camel.yaml
- route:
    id: export-invoices
    from:
      uri: "file:{{invoice-folder}}"
      parameters:
        antInclude: "*.json"
        move: .done
      steps:
        - to:
            uri: "{{erp-url}}/api/invoices"
            parameters:
              httpMethod: POST
        - to: micrometer:counter:invoices.processed
        - to: "kamelet:weikio-event-sink?channel=invoice-created"
finance/invoice-notify/routes/notify.camel.yaml
- route:
    id: invoice-notify
    from:
      uri: "kamelet:weikio-event-source?channel=invoice-created"
      steps:
        - log: "Invoice event received: ${body}"
        - to: "{{notify-url}}/api/messages"
Terminal
$ weikio deadletters list --env production
SEQ   TIME                      READER                   FROM                              DELIVERIES   REASON
812   2026-09-16 13:05:02 UTC   finance/invoice-notify   channel finance/invoice-created   3            HttpHostConnectException: Connect to https://notify.example.internal failed: Connection refused
/events
The Events page of production with invoice-created events from erp-invoice-export, each with its invoice number, supplier and amount, and the events budget of productionThe Events page of production with invoice-created events from erp-invoice-export, each with its invoice number, supplier and amount, and the events budget of productionThe Events page of production with invoice-created events from erp-invoice-export, each with its invoice number, supplier and amount, and the events budget of productionThe Events page of production with invoice-created events from erp-invoice-export, each with its invoice number, supplier and amount, and the events budget of production
Events lists the newest events of each channel with their attributes, beside the events budget of the environment.

Sources, channels and subscriptions

An event source brings events in from a queue, a bucket, a webhook or a folder, and a subscription binds the source to a channel. A channel with a type delivers its events on to a system such as Slack, S3 or Kafka, and your own integrations read and publish in between.

An event source brings events in from an external system with a Camel source kamelet, such as a queue, a bucket, a webhook or a folder. A subscription binds the source to a channel and can filter or transform the events on the way. The channel invoice-created stores every event for 30 days for its readers, the integrations invoice-notify and invoice-archive. A channel with a type also delivers its events to Slack, S3, SFTP, Kafka, JMS or any HTTP endpoint.

How events are delivered

Delivery and retries

Publishing waits until the hub has stored the event. Each reader receives everything published from its first deploy on, also while it's stopped, and it acknowledges an event when its route has finished it. A failed event comes back after the delays the reader sets.

Docs: Delivery and CloudEvents

Idempotent consumer

An event keeps its id when it's delivered again or resent. Camel's idempotent consumer with #weikioIdempotent handles each event once across every copy of the integration.

Docs: Delivery and CloudEvents

Dead letters and resend

An event that a reader still fails after its last attempt goes to the dead letters, where you resend or discard it. You can also skip a reader to now, rewind it, or resend any stored event to every reader or to one.

Docs: Dead letters

Event headers

An event keeps the body your route published, unchanged. Beside it the platform stores the event's ID, the integration that published it, the agent that sent it and the trace context, so a reader's trace continues the publisher's trace.

Docs: Delivery and CloudEvents

Change tracking

Changes in PostgreSQL, MySQL, SQL Server, Oracle, MongoDB, DB2 and every other database with a Debezium connector arrive in a channel as events. The offsets stay in a table in the source database.

Docs: Change tracking

The entity store

Integrations keep a record of what they have processed in the entity store. Every change to a record is published as an event, and earlier revisions of each record can be read back.

Docs: The entity store
/events/dead-letters
The Dead letters page of devtest with invoice-created events that invoice-approvals failed on because the approval service couldn't be reachedThe Dead letters page of devtest with invoice-created events that invoice-approvals failed on because the approval service couldn't be reachedThe Dead letters page of devtest with invoice-created events that invoice-approvals failed on because the approval service couldn't be reachedThe Dead letters page of devtest with invoice-created events that invoice-approvals failed on because the approval service couldn't be reached
Dead letters lists the events a reader couldn't handle after its last attempt, with the reason, and Resend sends one back to its reader.

Machines and devices. Machines publish their readings to an MQTT broker in Weik.io Cloud, and an event source brings the messages into your channels. MQTT brokers in Weik.io Cloud

Questions

Does a reader miss events while it's stopped?

A reader receives everything published from its first deploy on, including the events that arrived while it was stopped.

How long are events kept?

Events are kept for 30 days per environment within a size budget, and a channel can also pass its events through without storing them.

What happens to an event a reader keeps failing?

After the last attempt the event goes to the dead letters, where you resend it to that reader or discard it.

Which databases does change tracking support?

Change tracking works with every database that has a Debezium connector, PostgreSQL, MySQL, SQL Server, Oracle, MongoDB and DB2 among them.

Is Weik.io open source?

Weik.io is open source under the Apache License 2.0 and runs on your own servers, in your cloud or in Weik.io Cloud.

Read the event docs

The channel guide declares invoice-created, publishes into it from one integration and receives its events in another.