Skip to content

Destinations

Where events are delivered.

Overview

Every route needs exactly one destination. Destinations connect to message brokers, APIs, and other systems.

Which broker supports which destination?

See the Destination Support Matrix for a comprehensive cross-reference of all supported brokers and destinations.

Common Features

All destinations support:

  • Destination Pooling - Configurable pool sizes for performance tuning (see below)
  • TLS Encryption - Secure connections with optional mutual TLS (mTLS) - see TLS & mTLS below
  • Dynamic Routing (Templating) - Use variables in topic names, URLs, routing keys, etc. (see below) — all destinations except gRPC

Most destinations support:

  • Message Headers - Event metadata sent with each message — see Per-Destination Details for which destinations support headers
  • Content Encoding - Compress payload with gzip or deflate — supported by HTTP-based and SDK-based destinations (HTTP, SOAP, gRPC, AWS EventBridge, AWS SNS, AWS SQS, Azure Event Grid, Azure Storage Queue, Azure Web PubSub, GCP Cloud Tasks) - see Content Encodings
  • Content Transfer Encoding - Encode payload with base64 — same destinations as Content Encoding - see Content Transfer Encodings

Destination Pool

KETE maintains a pool of destination instances for each route. Destination pooling improves performance by reusing instances instead of creating new ones for each event.

Pool Configuration

KETE uses Apache Commons Pool 2 for destination pooling. All properties are under the destination.pool.* prefix.

Core Properties

Property Default Description
destination.pool.min-idle 1 Minimum number of idle connections maintained in the pool
destination.pool.max-idle 10 Maximum number of idle connections allowed in the pool
destination.pool.max-total 20 Maximum total connections (active + idle) allowed in the pool
destination.pool.max-wait-seconds -1 Maximum seconds to wait when borrowing from an exhausted pool (-1 = wait indefinitely)
destination.pool.block-when-exhausted true Whether to block when the pool is exhausted (if false, throws exception)

Advanced Properties

Property Default Description
destination.pool.lifo true Last In First Out - uses recently returned connections first (stack behavior)
destination.pool.fairness false Whether to ensure fairness when threads wait for connections (adds overhead)
destination.pool.test-on-create false Validate connections when created
destination.pool.test-on-borrow false Validate connections before use (recommended for production)
destination.pool.test-on-return false Validate connections when returned to pool
destination.pool.test-while-idle false Validate idle connections proactively (recommended with eviction enabled)
destination.pool.time-between-eviction-runs-seconds -1 Seconds between eviction runs (-1 disables, recommended: 60 for 1 minute)
destination.pool.min-evictable-idle-time-seconds 1800 Minimum idle time in seconds before connection eligible for eviction (30 minutes)
destination.pool.soft-min-evictable-idle-time-seconds -1 Soft minimum idle time in seconds (only evicts if min-idle exceeded, -1 disables)
destination.pool.num-tests-per-eviction-run 3 Number of connections to test during each eviction run

Example

# Basic pool configuration for high-volume route
kete.routes.high-volume.destination.kind=kafka
kete.routes.high-volume.destination.bootstrap.servers=kafka:9092
kete.routes.high-volume.destination.topic=keycloak-events
kete.routes.high-volume.destination.pool.min-idle=10
kete.routes.high-volume.destination.pool.max-idle=25
kete.routes.high-volume.destination.pool.max-total=50

# Production-ready configuration with validation and eviction
kete.routes.production.destination.kind=amqp-0.9.1
kete.routes.production.destination.host=rabbitmq.prod
kete.routes.production.destination.exchange=events
kete.routes.production.destination.pool.min-idle=5
kete.routes.production.destination.pool.max-idle=15
kete.routes.production.destination.pool.max-total=30
kete.routes.production.destination.pool.test-on-borrow=true
kete.routes.production.destination.pool.test-while-idle=true
kete.routes.production.destination.pool.time-between-eviction-runs-seconds=60

Tuning Guidelines

Scenario Recommendation
Low volume (< 10 events/sec) Default values are sufficient (min-idle=1, max-idle=10, max-total=20)
Medium volume (10-100 events/sec) min-idle=10, max-idle=20, max-total=30
High volume (> 100 events/sec) min-idle=20, max-idle=50, max-total=100
Fixed pool size Set min-idle=max-idle=max-total (e.g., all to 15)
Production environments Enable test-on-borrow=true and test-while-idle=true with time-between-eviction-runs-seconds=60
Unstable networks Enable validation (test-on-borrow=true) to detect broken connections before use

Performance vs. Reliability

Default configuration favors performance with validation disabled. For production:

  • Enable test-on-borrow=true (~1-5ms latency per borrow, but prevents broken connections)
  • Enable test-while-idle=true + set time-between-eviction-runs-seconds=60 (proactive health checks)
  • Reduce max-idle to match max-total more closely (avoid holding excess idle connections)

Validation Rules

  • pool.min-idle must be greater than 0
  • pool.max-idle must be greater than 0
  • pool.max-total must be greater than 0
  • pool.max-total must be greater than or equal to pool.min-idle
  • pool.max-wait-seconds must be -1 or greater (-1 = wait indefinitely)

Template Variables

All destinations support template variables for dynamic routing. Use these in topic names, exchange names, routing keys, URLs, etc.

Available Variables

Variable Description Example Values
${kindLowerCase} Event kind (lowercase) event, admin_event
${kindUpperCase} Event kind (uppercase) EVENT, ADMIN_EVENT
${kindKebabCase} Event kind (kebab-case) event, admin-event
${kindPascalCase} Event kind (PascalCase) Event, AdminEvent
${kindCamelCase} Event kind (camelCase) event, adminEvent
${eventTypeLowerCase} Event type (lowercase) login, login_error
${eventTypeUpperCase} Event type (uppercase) LOGIN, LOGIN_ERROR
${eventTypeKebabCase} Event type (kebab-case) login, login-error
${eventTypePascalCase} Event type (PascalCase) Login, LoginError
${eventTypeCamelCase} Event type (camelCase) login, loginError
${realmLowerCase} Realm name (lowercase) master, my_realm
${realmUpperCase} Realm name (uppercase) MASTER, MY_REALM
${realmKebabCase} Realm name (kebab-case) master, my-realm
${realmPascalCase} Realm name (PascalCase) Master, MyRealm
${realmCamelCase} Realm name (camelCase) master, myRealm
${resourceTypeLowerCase} Admin event resource (lowercase) user, realm_role
${resourceTypeUpperCase} Admin event resource (uppercase) USER, REALM_ROLE
${resourceTypeKebabCase} Admin event resource (kebab-case) user, realm-role
${resourceTypePascalCase} Admin event resource (PascalCase) User, RealmRole
${resourceTypeCamelCase} Admin event resource (camelCase) user, realmRole
${operationTypeLowerCase} Admin event operation (lowercase) create, update, delete
${operationTypeUpperCase} Admin event operation (uppercase) CREATE, UPDATE, DELETE
${operationTypeKebabCase} Admin event operation (kebab-case) create, update, delete
${operationTypePascalCase} Admin event operation (PascalCase) Create, Update, Delete
${operationTypeCamelCase} Admin event operation (camelCase) create, update, delete
${resultLowerCase} Event result (lowercase) success, error
${resultUpperCase} Event result (uppercase) SUCCESS, ERROR
${resultKebabCase} Event result (kebab-case) success, error
${resultPascalCase} Event result (PascalCase) Success, Error
${resultCamelCase} Event result (camelCase) success, error

Understanding Event Types

User Events (kind=EVENT): Standard authentication and account events like LOGIN, LOGOUT, REGISTER, UPDATE_PASSWORD, etc.

Admin Events (kind=ADMIN_EVENT): Administrative operations performed via the Admin Console or API. The eventType is formed as {resourceType}_{operationType}, for example:

  • USER_CREATE - A user was created
  • CLIENT_UPDATE - A client was updated
  • REALM_DELETE - A realm was deleted

For a complete list of event types, see Event Types Reference.

Usage Examples

Route events to different Kafka topics by type:

kete.routes.events.destination.topic=keycloak-${eventTypeLowerCase}
# → keycloak-login, keycloak-logout, keycloak-user_create

Route to different RabbitMQ exchanges by kind:

kete.routes.events.destination.exchange=keycloak-${kindLowerCase}
# → keycloak-event, keycloak-admin_event

Route to different HTTP endpoints by realm:

kete.routes.events.destination.url=https://api.example.com/${realmLowerCase}/events
# → https://api.example.com/master/events

Use kebab-case for URL-friendly paths:

kete.routes.events.destination.url=https://api.example.com/events/${eventTypeKebabCase}
# → https://api.example.com/events/login-error (instead of login_error)

Use PascalCase for Azure Event Grid event types:

kete.routes.events.destination.event-type=Keycloak.${eventTypePascalCase}
# → Keycloak.LoginError

Message Headers

Most destinations send event metadata as headers alongside the message body.

Standard Headers

Most destinations that support headers send these three headers:

Header Description Example Values
eventtype The Keycloak event type LOGIN, LOGOUT, REGISTER, USER_CREATE, CLIENT_UPDATE
eventkind Whether it's a user event or admin event EVENT, ADMIN_EVENT
contenttype The MIME type of the message body application/json, application/xml, application/cbor

Header names are all lowercase with no dashes or underscores for maximum compatibility across messaging systems. Exceptions: HTTP uses x-eventkind, x-eventtype, and the standard Content-Type header; some destinations use their protocol's native content-type property (see per-destination details below).

Per-Destination Details

Destination Headers Supported Content-Type Handling Notes
Kafka contenttype header All three as Kafka record headers (byte[])
AMQP 0.9.1 Native content-type property eventtype and eventkind as AMQP headers
AMQP 1 contenttype JMS property All three as JMS String properties
MQTT 5 Native MQTT contentType eventtype and eventkind as User Properties
MQTT 3 Not supported Protocol limitation
Redis Stream contenttype field All three as stream entry fields
Redis Pub/Sub Not supported Protocol limitation
HTTP Standard Content-Type header x-eventkind, x-eventtype as custom headers; Content-Type as standard header
WebSocket contenttype header All three + custom as HTTP headers on WebSocket client (sent during handshake)
SignalR Not supported Message body only
Socket.IO Not supported Message body only
STOMP Native content-type header eventtype and eventkind as STOMP headers
ZeroMQ Not supported Raw message bytes only
GCP Pub/Sub contenttype attribute All three as Pub/Sub message attributes
GCP Cloud Tasks contenttype header All three as HTTP headers on the Cloud Task request
gRPC contenttype metadata All three as gRPC Metadata (ASCII string marshaller)
NATS contenttype header All three as NATS message headers
NATS JetStream contenttype header All three as NATS message headers
Pulsar contenttype property All three as Pulsar message properties
AWS EventBridge Not supported No per-event custom attributes in EventBridge
AWS SNS contenttype attribute All three as SNS MessageAttributes
AWS SQS contenttype attribute All three as SQS MessageAttributes
AWS Kinesis Not supported Only data + partition key
Azure Event Hubs contenttype property All three as Application Properties
Azure Service Bus Native contentType All three as Application Properties + native contentType property
SOAP Standard Content-Type header x-eventkind, x-eventtype as custom headers; Content-Type as standard header
Azure Event Grid Not supported EventGridEvent schema has no custom properties
Azure Storage Queue Not supported Queue messages contain body only
Azure Web PubSub Not supported Message body only

TLS & mTLS

Most destinations support TLS encryption via the standard tls.* configuration properties. Exceptions:

  • Azure Event Hubs and Azure Service Bus — TLS is handled internally by the Azure SDK (always enabled, no tls.* config needed)
  • ZeroMQ — uses CurveZMQ for encryption instead of TLS (see ZeroMQ)

TLS Properties Reference

Property Default Description
destination.tls.enabled false Enable TLS
destination.tls.version TLS TLS protocol version (e.g., TLSv1.2, TLSv1.3)
destination.tls.verify-hostname false Verify the server's hostname against the certificate
destination.tls.trust-store.loader.kind Certificate loader kind (see below)
destination.tls.trust-store.loader.* Loader-specific properties
destination.tls.trust-store.password (empty) Trust store password
destination.tls.trust-store.type JVM default Trust store type (e.g., pkcs12, jks)
destination.tls.trust-store.trust-manager-algorithm JVM default Trust manager algorithm
destination.tls.key-store.loader.kind Certificate loader kind (see below)
destination.tls.key-store.loader.* Loader-specific properties
destination.tls.key-store.password (empty) Key store password
destination.tls.key-store.key-password (empty) Private key password (if different from key store password)
destination.tls.key-store.type JVM default Key store type (e.g., pkcs12, jks)
destination.tls.key-store.key-manager-algorithm JVM default Key manager algorithm

There are two main scenarios:

TLS (Server Authentication)

Your application verifies the server's certificate. Use a trust store containing the CA certificate(s) that signed the server's certificate.

kete.routes.myroute.destination.tls.enabled=true

# Load CA certificate from file path
kete.routes.myroute.destination.tls.trust-store.loader.kind=pem-file-path
kete.routes.myroute.destination.tls.trust-store.loader.path=/path/to/ca-cert.pem

mTLS (Mutual Authentication)

Both parties verify each other. Use a trust store for server verification AND a key store for your client certificate.

kete.routes.myroute.destination.tls.enabled=true

# Trust store (verify server)
kete.routes.myroute.destination.tls.trust-store.loader.kind=pem-file-path
kete.routes.myroute.destination.tls.trust-store.loader.path=/path/to/ca-cert.pem

# Key store (your client certificate)
kete.routes.myroute.destination.tls.key-store.loader.kind=pkcs12-file-path
kete.routes.myroute.destination.tls.key-store.loader.path=/path/to/client.p12
kete.routes.myroute.destination.tls.key-store.password=changeit

Certificate Loaders

KETE supports various certificate formats through Certificate Loaders. Each loader is identified by a kind value:

Format File Path Base64 Encoded Text Content
PEM pem-file-path pem-file-base64 pem-file-text
DER der-file-path der-file-base64
PKCS#12 pkcs12-file-path pkcs12-file-base64
JKS jks-file-path jks-file-base64
PKCS#7 pkcs7-file-path pkcs7-file-base64

For detailed information about each loader and their properties, see Certificate Loaders.

Quick Format Guide

Format Best For
PEM Most common, human-readable, supports certificates and private keys
DER Binary format, single certificate, trust stores only
PKCS#12 (.p12/.pfx) Bundled certificate + private key, password protected
JKS Java KeyStore format, legacy Java applications
PKCS#7 (.p7b/.p7c) Certificate chains, no private keys, trust stores only

Available Destinations

destination.kind Protocol Compatible Systems
kafka Kafka Protocol Kafka, Redpanda, Confluent, Azure Event Hubs, Amazon MSK, Aiven, Strimzi, WarpStream, Instaclustr
amqp-0.9.1 AMQP 0-9-1 RabbitMQ, LavinMQ, CloudAMQP, Amazon MQ
amqp-1 AMQP 1 ActiveMQ Artemis, Azure Service Bus, Azure Event Hubs, Qpid, RabbitMQ 4.0+, Solace PubSub+, Amazon MQ
mqtt-3 MQTT 3 Mosquitto, HiveMQ, HiveMQ Cloud, EMQX, EMQX Cloud, VerneMQ, NanoMQ, RabbitMQ, ActiveMQ Artemis, Solace PubSub+, Azure Event Grid, Apache RocketMQ, AWS IoT Core, Azure IoT Hub
mqtt-5 MQTT 5 HiveMQ, HiveMQ Cloud, EMQX, EMQX Cloud, VerneMQ, NanoMQ, Mosquitto 2.0+, RabbitMQ, ActiveMQ Artemis, Solace PubSub+, Azure Event Grid
redis-pubsub Redis RESP Redis, Valkey, Dragonfly, KeyDB, Garnet, ElastiCache, Azure Cache for Redis, Google Memorystore, Upstash
redis-stream Redis RESP Redis 5.0+, Valkey, Dragonfly, KeyDB, ElastiCache, Azure Cache for Redis, Google Memorystore, Upstash
nats NATS Protocol NATS Server, Synadia Cloud
nats-jetstream NATS JetStream NATS Server, Synadia Cloud
pulsar Pulsar Protocol Apache Pulsar, StreamNative Cloud, DataStax Astra Streaming, DataStax Luna Streaming
http HTTP/HTTPS Webhooks, REST APIs, any HTTP endpoint
websocket WebSocket Real-time servers, custom backends, dashboards
stomp STOMP 1.2 ActiveMQ Classic, ActiveMQ Artemis, Amazon MQ, RabbitMQ, EMQX, Apache Apollo, HornetQ, TIBCO EMS, OpenMQ
zeromq ZMTP (ZeroMQ) Any ZeroMQ peer (brokerless, 40+ language bindings)
gcp-pubsub HTTP/REST (Pub/Sub API) Google Cloud Pub/Sub, GCP Pub/Sub Emulator
azure-storage-queue Azure Storage Queue REST API Azure Storage Queue, Azurite Emulator
aws-eventbridge AWS EventBridge API (SDK) Amazon EventBridge, LocalStack
aws-sqs AWS SQS API (SDK) Amazon SQS, LocalStack
aws-sns AWS SNS API (SDK) Amazon SNS, LocalStack
aws-kinesis AWS Kinesis API (SDK) Amazon Kinesis Data Streams, LocalStack
azure-eventhubs Azure Event Hubs SDK (AMQP) Azure Event Hubs, Azure Event Hubs Emulator
azure-servicebus Azure Service Bus SDK (AMQP) Azure Service Bus, Azure Service Bus Emulator
azure-eventgrid Azure Event Grid REST API (SDK) Azure Event Grid
azure-webpubsub Azure Web PubSub REST API (SDK) Azure Web PubSub
gcp-cloud-tasks Cloud Tasks REST API (SDK) Google Cloud Tasks, Cloud Tasks Emulator
grpc gRPC (HTTP/2) Any gRPC server
signalr SignalR (HTTP/WebSocket) ASP.NET Core SignalR, Azure SignalR Service
soap SOAP (HTTP/HTTPS) Any SOAP endpoint
socketio Socket.IO (Engine.IO) Socket.IO v3/v4 servers (Node.js, Python, Java)

Cloud Services Compatibility

KETE works with major cloud messaging services through protocol compatibility:

Cloud Service Use Destination Documentation
Azure Event Hubs azure-eventhubs, kafka, or amqp-1 Azure Event Hubs / Kafka / AMQP 1
Azure Service Bus azure-servicebus or amqp-1 Azure Service Bus / AMQP 1
Azure Event Grid azure-eventgrid, http, or mqtt-5 Azure Event Grid / HTTP / MQTT 5
Azure Cache for Redis redis-pubsub or redis-stream Redis Pub/Sub / Redis Stream
Azure Storage Queue azure-storage-queue Azure Storage Queue
Amazon ElastiCache redis-pubsub or redis-stream Redis Pub/Sub / Redis Stream
Amazon MSK kafka Kafka
Amazon MQ (Artemis) amqp-1 or stomp AMQP 1 / STOMP
Amazon MQ (ActiveMQ) amqp-1 or stomp AMQP 1 / STOMP
Amazon MQ (RabbitMQ) amqp-0.9.1 or amqp-1 AMQP 0.9.1 / AMQP 1
Confluent Cloud kafka Kafka
AWS IoT Core mqtt-3 MQTT 3
Azure IoT Hub mqtt-3 MQTT 3
Google Cloud Memorystore redis-pubsub or redis-stream Redis Pub/Sub / Redis Stream
Google Cloud Pub/Sub gcp-pubsub GCP Pub/Sub
Google Cloud Tasks gcp-cloud-tasks GCP Cloud Tasks
Amazon EventBridge aws-eventbridge AWS EventBridge
Amazon SQS aws-sqs AWS SQS
Amazon SNS aws-sns AWS SNS
Amazon Kinesis aws-kinesis AWS Kinesis
Azure Web PubSub azure-webpubsub Azure Web PubSub
Azure SignalR Service signalr SignalR
Upstash redis-pubsub or redis-stream Redis Pub/Sub / Redis Stream
Aiven for Kafka kafka Kafka
StreamNative Cloud pulsar Pulsar
DataStax Astra Streaming pulsar Pulsar
DataStax Luna Streaming pulsar Pulsar
Synadia Cloud nats or nats-jetstream NATS / NATS JetStream
CloudAMQP amqp-0.9.1 AMQP 0.9.1
HiveMQ Cloud mqtt-3 or mqtt-5 MQTT 3 / MQTT 5
EMQX Cloud mqtt-3 or mqtt-5 MQTT 3 / MQTT 5

Multiple Protocol Options

Azure Event Hubs, Azure Service Bus, and Azure Event Grid can each be accessed via their native SDK destination or through standard protocols (Kafka, AMQP 1.0, HTTP, MQTT). Use the native SDK destination for features like Managed Identity authentication, or use protocol-based destinations for portability.

Quick Examples

Kafka:

kete.routes.events.destination.kind=kafka
kete.routes.events.destination.bootstrap.servers=kafka:9092
kete.routes.events.destination.topic=keycloak-events

RabbitMQ:

kete.routes.events.destination.kind=amqp-0.9.1
kete.routes.events.destination.host=rabbitmq
kete.routes.events.destination.exchange=keycloak-events
kete.routes.events.destination.routing-key=events

HTTP Webhook:

kete.routes.events.destination.kind=http
kete.routes.events.destination.url=https://api.example.com/events

ZeroMQ (PUB/SUB):

kete.routes.events.destination.kind=zeromq
kete.routes.events.destination.endpoint=tcp://subscriber:5556
# Defaults: socket-type=PUBLISH, connection-mode=CONNECT

GCP Pub/Sub:

kete.routes.events.destination.kind=gcp-pubsub
kete.routes.events.destination.project=my-gcp-project
kete.routes.events.destination.topic=keycloak-events
kete.routes.events.destination.credentials-file-path=/secrets/service-account.json

Azure Storage Queue:

kete.routes.events.destination.kind=azure-storage-queue
kete.routes.events.destination.connection-string=DefaultEndpointsProtocol=https;AccountName=mystorageaccount;AccountKey=your-key;EndpointSuffix=core.windows.net
kete.routes.events.destination.queue=keycloak-events

AWS EventBridge:

kete.routes.events.destination.kind=aws-eventbridge
kete.routes.events.destination.event-bus=my-event-bus
kete.routes.events.destination.source=keycloak
kete.routes.events.destination.detail-type=KeycloakEvent
kete.routes.events.destination.region=us-east-1

Azure Web PubSub:

kete.routes.events.destination.kind=azure-webpubsub
kete.routes.events.destination.connection-string=Endpoint=https://my-webpubsub.webpubsub.azure.com;AccessKey=your-key;Version=1.0;
kete.routes.events.destination.hub=keycloak-events

GCP Cloud Tasks:

kete.routes.events.destination.kind=gcp-cloud-tasks
kete.routes.events.destination.project=my-gcp-project
kete.routes.events.destination.location=us-central1
kete.routes.events.destination.queue=keycloak-events
kete.routes.events.destination.target-url=https://my-service.run.app/events

SignalR:

kete.routes.events.destination.kind=signalr
kete.routes.events.destination.url=http://signalr-server:5000/hub
kete.routes.events.destination.hub-method=SendEvent

Socket.IO:

kete.routes.events.destination.kind=socketio
kete.routes.events.destination.url=http://socketio-server:3000
kete.routes.events.destination.event-name=keycloak-event

gRPC:

kete.routes.events.destination.kind=grpc
kete.routes.events.destination.host=grpc-server
kete.routes.events.destination.port=50051
kete.routes.events.destination.service=EventService
kete.routes.events.destination.method=SendEvent
kete.routes.events.destination.use-plaintext=true

SOAP:

kete.routes.events.destination.kind=soap
kete.routes.events.destination.url=https://api.example.com/soap/events

Azure Event Grid:

kete.routes.events.destination.kind=azure-eventgrid
kete.routes.events.destination.endpoint=https://my-topic.eastus-1.eventgrid.azure.net/api/events
kete.routes.events.destination.access-key=your-access-key

Azure Event Hubs:

kete.routes.events.destination.kind=azure-eventhubs
kete.routes.events.destination.connection-string=Endpoint=sb://my-namespace.servicebus.windows.net/;SharedAccessKeyName=send;SharedAccessKey=your-key;EntityPath=my-hub

Azure Service Bus:

kete.routes.events.destination.kind=azure-servicebus
kete.routes.events.destination.connection-string=Endpoint=sb://my-namespace.servicebus.windows.net/;SharedAccessKeyName=send;SharedAccessKey=your-key
kete.routes.events.destination.queue=keycloak-events

AMQP 1.0:

kete.routes.events.destination.kind=amqp-1
kete.routes.events.destination.host=artemis.example.com
kete.routes.events.destination.destination-name=keycloak.events

MQTT 3:

kete.routes.events.destination.kind=mqtt-3
kete.routes.events.destination.host=mosquitto.example.com
kete.routes.events.destination.topic=keycloak/events

MQTT 5:

kete.routes.events.destination.kind=mqtt-5
kete.routes.events.destination.host=hivemq.example.com
kete.routes.events.destination.topic=keycloak/events

NATS:

kete.routes.events.destination.kind=nats
kete.routes.events.destination.servers=nats://localhost:4222
kete.routes.events.destination.subject=keycloak.events
kete.routes.events.destination.authentication-method=none

NATS JetStream:

kete.routes.events.destination.kind=nats-jetstream
kete.routes.events.destination.servers=nats://localhost:4222
kete.routes.events.destination.subject=keycloak.events
kete.routes.events.destination.stream=KEYCLOAK_EVENTS
kete.routes.events.destination.authentication-method=none

Pulsar:

kete.routes.events.destination.kind=pulsar
kete.routes.events.destination.service-url=pulsar://localhost:6650
kete.routes.events.destination.topic=persistent://public/default/keycloak-events

Redis Pub/Sub:

kete.routes.events.destination.kind=redis-pubsub
kete.routes.events.destination.host=redis.example.com
kete.routes.events.destination.channel=keycloak-events

Redis Stream:

kete.routes.events.destination.kind=redis-stream
kete.routes.events.destination.host=redis.example.com
kete.routes.events.destination.stream=keycloak-events

STOMP:

kete.routes.events.destination.kind=stomp
kete.routes.events.destination.host=activemq.example.com
kete.routes.events.destination.destination=/queue/keycloak-events

WebSocket:

kete.routes.events.destination.kind=websocket
kete.routes.events.destination.url=ws://websocket-server:8080/events

AWS Kinesis:

kete.routes.events.destination.kind=aws-kinesis
kete.routes.events.destination.stream=keycloak-events
kete.routes.events.destination.partition-key=keycloak

AWS SNS:

kete.routes.events.destination.kind=aws-sns
kete.routes.events.destination.topic=keycloak-events

AWS SQS:

kete.routes.events.destination.kind=aws-sqs
kete.routes.events.destination.queue=keycloak-events