emqx/lib-ee/emqx_ee_schema_registry/README.md

74 lines
2.9 KiB
Markdown

# EMQX Schema Registry
EMQX Schema Registry for managing various of schemas for
decoding/encoding messages.
To use schema in rule engine, a schema name should be passed to the
SQL functions that decode/encode data, like:
```sql
SELECT
schema_decode('sensor_notify', payload) as payload
FROM
"message.publish"
WHERE
topic = 't/1'
```
## Using schema registry with rule engine
```
+---------------------------+
| |
Events/Msgs | | Events/Msgs
--------------------> EMQX |------------------>
| |
| |
+-------------|-------------+
|
HOOK |
|
+-------------v-------------+ +----------+
| | Data | |
| Rule Engine ------------- Backends |
| | | |
+------|-------------|------+ +----------+
|^ |^
Decode|| ||Encode
|| ||
+------v|------------v|-----+
| |
| Schema Registry |
| |
+---------------------------+
```
## Architecture
```
| |
Decode | [APIs] | Encode
| |
| | [Registry]
+------v--------------v------+
REGISTER SCHEMA | |
INSTANCE | | +--------+
-------------------> | | |
[Management APIs] | Schema Registry ------ Schema |
| | | |
| | +--------+
| |
+----------------------------+
/ | \
+---/---+ +---|----+ +---\---+
| | | | | |
[Decoders] | Avro | |ProtoBuf| |Others |
| | | | | |
+-------+ +--------+ +-------+
```
- Register schema instance: adds a new instance of a schema of a
certain type. For example, when the user may have several Avro or
Protobuf schemas that they wish to use with different data flows.