-`nats_url`– host:port (for example, `localhost:5672`)..
-`nats_subjects`– List of subject for NATS table to subscribe/publsh to. Supports wildcard subjects like `foo.*.bar` or `baz.>`
-`nats_format`– Message format. Uses the same notation as the SQL `FORMAT` function, such as `JSONEachRow`. For more information, see the [Formats](../../../interfaces/formats.md) section.
Optional parameters:
-`nats_row_delimiter`– Delimiter character, which ends the message.
-`nats_schema`– Parameter that must be used if the format requires a schema definition. For example, [Cap’n Proto](https://capnproto.org/) requires the path to the schema file and the name of the root `schema.capnp:Message` object.
-`nats_num_consumers`– The number of consumers per table. Default: `1`. Specify more consumers if the throughput of one consumer is insufficient.
-`nats_queue_group`– Name for queue group of NATS subscribers. Default is the table name.
-`nats_max_reconnect`– Maximum amount of reconnection attempts per try to connect to NATS. Default: `5`.
-`nats_reconnect_wait`– Amount of time in milliseconds to sleep between each reconnect attempt. Default: `5000`.
-`nats_server_list` - Server list for connection. Can be specified to connect to NATS cluster.
-`nats_skip_broken_messages` - NATS message parser tolerance to schema-incompatible messages per block. Default: `0`. If `nats_skip_broken_messages = N` then the engine skips *N* RabbitMQ messages that cannot be parsed (a message equals a row of data).
-`nats_max_block_size` - Number of row collected by poll(s) for flushing data from NATS.
-`nats_flush_interval_ms` - Timeout for flushing data read from NATS.
-`nats_username` - NATS username.
-`nats_password` - NATS password.
-`nats_token` - NATS auth token.
SSL connection:
For secure connection use `nats_secure = 1`.
The default behaviour of the used library is not to check if the created TLS connection is sufficiently secure. Whether the certificate is expired, self-signed, missing or invalid: the connection is simply permitted. More strict checking of certificates can possibly be implemented in the future.
The NATS server configuration can be added using the ClickHouse config file.
More specifically you can add Redis password for NATS engine:
``` xml
<nats>
<user>click</user>
<password>house</password>
<token>clickhouse</token>
</nats>
```
## Description {#description}
`SELECT` is not particularly useful for reading messages (except for debugging), because each message can be read only once. It is more practical to create real-time threads using [materialized views](../../../sql-reference/statements/create/view.md). To do this:
1. Use the engine to create a NATS consumer and consider it a data stream.
2. Create a table with the desired structure.
3. Create a materialized view that converts data from the engine and puts it into a previously created table.
When the `MATERIALIZED VIEW` joins the engine, it starts collecting data in the background. This allows you to continually receive messages from NATS and convert them to the required format using `SELECT`.
One NATS table can have as many materialized views as you like, they do not read data from the table directly, but receive new records (in blocks), this way you can write to several tables with different detail level (with grouping - aggregation and without).
To stop receiving streams data or to change the conversion logic, detach the materialized view:
``` sql
DETACH TABLE consumer;
ATTACH TABLE consumer;
```
If you want to change the target table by using `ALTER`, we recommend disabling the material view to avoid discrepancies between the target table and the data from the view.