Use a RabbitMQ destination to publish rows from a Lake table, a Warehouse table or a query to an exchange on your broker. Each table publishes under its own routing key, and you choose whether each run sends every row or only recent ones.
For editing, duplicating and deleting a destination, see Add and manage destinations.
| Setting | What it does | Default |
|---|---|---|
| Host | The broker's host name or IP address. Required. | None |
| Port | The AMQP port. Turning TLS on or off switches it while it still has its default value. | 5672, or 5671 with TLS |
| TLS | Connects over AMQPS. | Off |
| Virtual host | The virtual host to use. | / |
| Management API port | Used to find the routing keys bound to the exchange. | 15672, or 15671 with TLS |
| Username and Password | The broker user. Both are required. | None |
| Exchange | The exchange that messages are published into. Required. | None |
| Exchange Type | Direct, Topic, Fanout or Headers. | Direct |
| Persistent messages | Persistent messages survive a broker restart. Transient messages do not. | Persistent |
| Max rows per message | In row mode, how many rows go into one message. Set it to 1 for one message per row. | 1000 |
To read from RabbitMQ into the Lake instead, see Webhook and RabbitMQ.
Leave Message Schemas empty and Writeback discovers the tables from the exchange's existing bindings: each routing key bound to a queue becomes a table. A routing key with no bound queue does not appear; add an entry for it to make it appear.
Message Schemas is an optional JSON list of table entries. Each entry can set:
name: the table name. Required.routingKey: the routing key to publish to. Defaults to the name.messageMode: row (the default) or envelope.columns: the columns of the table, if you list them. "pk": true marks the key column; leave the list out and the columns are detected from sample messages.When the field has entries, only those tables are offered. Clear the field to go back to discovery.
Row mode (the default) sends each message as one JSON object per row, with the mapped target column names as property names. When Max rows per message is above 1, several rows share one message, one JSON object per line. Your consumer must then split each message on new lines.
Envelope mode sends one message per row, wrapped like this:
{"entity": "Orders", "emittedAt": "2026-10-15T09:30:00Z", "data": {"OrderID": 1042, "Status": "shipped"}}emittedAt is the time the message is published. If the table is built from a query that returns one text column, envelope mode publishes that text as the message body, without the wrapper.
The fields that are published come from the column mapping on Columns. See Map columns.
By default, Sync mode is Full snapshot, so every run publishes all rows of the table. To publish only recent rows:
Each change saves at once, and DataMind OS confirms it with Publish window updated. If the save fails, Failed to update publish window appears; try again.
On every run, the table publishes the rows whose Increment column falls between the start of the run day minus Minus days, and the date and time of the run. For a run you start with Synchronize, that is the date and time you choose, recorded as its Snap Date. See Synchronize a table and read the Sync Log.
Minus days 0 publishes from the start of the run day. Minus days 1 publishes from the start of the day before, and switching to Incremental sets Minus days to 1 when it has no value.
The Publish Window appears only on tables of RabbitMQ destinations. Switch back to Full snapshot and every run publishes all rows again.
Each run publishes its rows again, so a repeated or a retried run can publish the same rows twice. Keep the window on Incremental, or limit the rows your source returns.
See Writeback permissions for the full list.
It uses the routingKey of the Message Schemas entry whose name matches the table. Without a matching entry, the table's name is the routing key.
No. Leave it empty and Writeback offers every routing key bound to a queue on the exchange as a table. Add entries when you need to control the routing key or the message mode, list columns, or include a routing key that has no bound queue yet. While the field has entries, only those tables are offered.
Row mode batches rows into one message, up to Max rows per message, which defaults to 1000. Set it to 1 for one message per row, or split each message on new lines in your consumer.
No. The exchange must already exist on the broker, and the broker user must be allowed to publish to it. DataMind OS does not declare the exchange, its queues or their bindings, so no other broker rights are needed.
Yes, by default. Persistent messages is on, so messages survive a broker restart. Turn it off to send Transient messages.
Set Sync mode to Incremental in the table's Publish Window, then choose an Increment column and a Minus days value. Full snapshot publishes every row on every run.
Each run publishes the rows from the start of the run day up to the time of the run.
Integers are sent as JSON numbers, including 64-bit values. Text columns are sent as strings.