anchor.diff:  }
   ----
   
  -This result was achieved with the {link-prefix}:{link-outbox-event-router}#outbox-event-router-configuration-options[default configuration] which assumes a table structure and event routing based on aggregates. In case you want a custom behavior, the SMT is fully configurable, check the {link-prefix}:{link-outbox-event-router}#outbox-event-router-configuration-options[available configuration options].
  -
  -== Configuration
  -
  -[[outbox-event-router-configuration-options]]
  -=== Configuration options
  -[cols="30%a,10%a,10%a,50%a"]
  -|===
  -|Property
  -|Default
  -|Group
  -|Description
  -
  -|[[outbox-event-router-property-table-field-event-id]]<<outbox-event-router-property-table-field-event-id, `table.field.event.id`>>
  -|`id`
  -|Table
  -|The column which contains the event ID within the outbox table
  -
  -|[[outbox-event-router-property-table-field-event-key]]<<outbox-event-router-property-table-field-event-key, `table.field.event.key`>>
  -|`aggregateid`
  -|Table
  -|The column which contains the event key within the outbox table; when this is set the value of this column will be used as a Kafka message key
  -
  -|[[outbox-event-router-property-table-field-event-timestamp]]<<outbox-event-router-property-table-field-event-timestamp, `table.field.event.timestamp`>>
  -|
  -|Table
  -|Optionally you can override the Kafka message timestamp with a value from a chosen field, otherwise it is the {prodname} event processed timestamp.
  -
  -|[[outbox-event-router-property-table-field-event-payload]]<<outbox-event-router-property-table-field-event-payload, `table.field.event.payload`>>
  -|`payload`
  -|Table
  -|The column which contains the event payload within the outbox table
  -
  -|[[outbox-event-router-property-table-field-event-payload-id]]<<outbox-event-router-property-table-field-event-payload-id, `table.field.event.payload.id`>>
  -|`aggregateid`
  -|Table
  -|The column which contains the payload ID within the outbox table
  -
  -|[[outbox-event-router-property-table-fields-additional-placement]]<<outbox-event-router-property-table-fields-additional-placement, `table.fields.additional.placement`>>
  -|
  -|Table, Envelope
  -|Extra fields can be added as part of the event envelope or as message header; the format is a list of colon-delimited pairs or trios when you desire to have aliases, e.g. `id:header,field_name:envelope:alias`. Placement options are `header` and `envelope`.
  -
  -|[[outbox-event-router-property-table-field-event-schema-version]]<<outbox-event-router-property-table-field-event-schema-version, `table.field.event.schema.version`>>
  -|
  -|Table, Schema
  -|When set, it is used as schema version as in the https://kafka.apache.org/20/javadoc/org/apache/kafka/connect/data/ConnectSchema.html#version--[Kafka Connect Schema] javadoc
  -
  -|[[outbox-event-router-property-route-by-field]]<<outbox-event-router-property-route-by-field, `route.by.field`>>
  -|`aggregatetype`
  -|Router
  -|The column which determines how the events will be routed, the value will become part of the topic name
  -
  -|[[outbox-event-router-property-route-topic-regex]]<<outbox-event-router-property-route-topic-regex, `route.topic.regex`>>
  -|`(?<routedByValue>.*)`
  -|Router
  -|The default regex to use within the RegexRouter, the default capture will allow to replace the routed field into a new topic name defined in `route.topic.replacement`
  -
  -|[[outbox-event-router-property-route-topic-replacement]]<<outbox-event-router-property-route-topic-replacement, `route.topic.replacement`>>
  -|`outbox.event{zwsp}.pass:[${routedByValue}]`
  -|Router
  -|The name of the topic in which the events will be routed, a replacement `pass:[${routedByValue}]` is available which is the value of The column configured via `route.by.field`
  -
  -|[[outbox-event-router-property-route-tombstone-on-empty-payload]]<<outbox-event-router-property-route-tombstone-on-empty-payload, `route.tombstone.on.empty.payload`>>
  -|`false`
  -|Router
  -|Whether or not an empty or `null` payload should cause a tombstone event.
  -
  -|[[outbox-event-router-property-debezium-op-invalid-behavior]]<<outbox-event-router-property-debezium-op-invalid-behavior, `debezium.op.invalid.behavior`>>
  -|`warn`
  -|{prodname}
  -|While {prodname} is monitoring the table, it is not expecting to see 'update' row events, in case it happens, this transform can log it as warning, error or stop the process. Options are `warn`, `error` and `fatal`
  -|===
  -
  -=== Default table columns
  +This example of a {prodname} outbox message is based on the {link-prefix}:{link-outbox-event-router}#outbox-event-router-configuration-options[default `outbox.EventRouter` configuration], which assumes an outbox table structure and event routing based on aggregates. To customize behavior, the `outbox.EventRouter` SMT provides numerous {link-prefix}:{link-outbox-event-router}#outbox-event-router-configuration-options[configuration options].
  +
  +// Type: concept
  +// Title: Outbox table structure expected by {prodname} outbox event router SMT
  +// ModuleID: outbox-table-structure-expected-by-debezium-outbox-eventrouter-smt
  +[[basic-outbox-table]]
  +== Basic outbox table
  +
  +To apply the default `outbox.EventRouter` SMT configuration, your outbox table is assumed to have the following columns: 
   
   [source]
   ----
  
positive.code: [id="outbox-event-router"]
  = Outbox Event Router
  
  
negative.code: payload       | jsonb                  |
  ----
  
  .Descriptions of expected outbox table columns
  [cols="30%a,70%a"]
  |===
  |Column
  |Effect
  
  |`id`
  |Contains the unique ID of the event. In an outbox message, this value is a header. You can use this ID, for example, to remove duplicate messages. +
   +
  To obtain the unique ID of the event from a different outbox table column, set the {link-prefix}:{link-outbox-event-router}#outbox-event-router-property-table-field-event-id[`table.field.event.id` SMT option] in the connector configuration.  
  
  |[[route-by-field-example]]`aggregatetype`
  |Contains a value that the SMT appends to the name of the topic to which the connector emits an outbox message. The default behavior is that this value replaces the default `${routedByValue}` variable in the {link-prefix}:{link-outbox-event-router}#outbox-event-router-property-route-topic-replacement[`route.topic.replacement`] SMT option. +
   +
  For example, in a default configuration, the {link-prefix}:{link-outbox-event-router}#outbox-event-router-property-route-by-field[`route.by.field`] SMT option is set to `aggregatetype` and the `route.topic.replacement` SMT option is set to `outbox.event.${routedByValue}`. Suppose that your application adds two records to the outbox table. In the first record, the value in the `aggregatetype` column is `customers`. In the second record, the value in the `aggregatetype` column is `orders`. The connector emits the first record to the `outbox.event.customers` topic. The connector emits the second record to the `outbox.event.orders` topic. +
   +
  To obtain this value from a different outbox table column, set the {link-prefix}:{link-outbox-event-router}#outbox-event-router-property-route-by-field[`route.by.field` SMT option] in the connector configuration. 
  
  |`aggregateid`
  |Contains the event key, which provides an ID for the payload. The SMT uses this value as the key in the emitted outbox message. This is important for maintaining correct order in Kafka partitions. +
   +
  To obtain the event key from a different outbox table column, set the {link-prefix}:{link-outbox-event-router}#outbox-event-router-property-table-field-event-key[`table.field.event.key` SMT option] in the connector configuration. 
  
  |`type`
  |A user-defined value that helps categorize or organize events.  
  
  a|`payload`
  |The representation of the event itself. The default structure is JSON. The content in this field becomes one of these: 
  
  * Part of the outbox message `payload`.
  * If other metadata, including `eventType` is delivered as headers, the payload becomes the message itself without encapsulation in an envelope. 
  
  To obtain the event payload from a different outbox table column, set the {link-prefix}:{link-outbox-event-router}#outbox-event-router-property-table-field-event-payload[`table.field.event.payload` SMT option] in the connector configuration. 
  
  |===
  
  // Type: concept
  // Title: Basic {prodname} outbox event router SMT configuration
  // ModuleID: basic-debezium-outbox-event-router-smt-configuration
  [[basic-outbox-configuration]]
  == Basic configuration
  
  To configure a {prodname} connector to support the outbox pattern, configure the `outbox.EventRouter` SMT. For example, the basic configuration in a `.properties` file looks like this: 
  
  [source]
  ----
  