BrainBlast/_software_lib/nanomq-0.22.10/config/nanomq_example.conf

1322 lines
36 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# NanoMQ Configuration 0.19.1
# #============================================================
# # NanoMQ Broker
# #============================================================
system {
# # num_taskq_thread
# # Use a specified number of taskq threads
# #
# # Value: 1-255, Obtain automatically if 0
num_taskq_thread = 0
# # max_taskq_thread
# # Use a specified maximunm number of taskq threads
# #
# # Value: 1-255, Obtain automatically if 0
max_taskq_thread = 0
# # parallel
# # Handle a specified maximum number of outstanding requests
# #
# # Value: 1-255, Obtain automatically if 0
parallel = 0
# # hook_ipc_url
# # Specify hook ipc url
# #
## Value: ipc://path
hook_ipc_url = "ipc:///tmp/nanomq_hook.ipc"
# # cmd_ipc_url
# # Specify cmd ipc url
# #
# # Value: ipc://path
cmd_ipc_url = "ipc:///tmp/nanomq_cmd.ipc"
}
mqtt {
# # max_packet_size
# # Defines the default max size of a packet that NanoMQ could accept and send
# #
# # Hot updatable
# # Value: 1 Byte-260 MB
max_packet_size = 1KB
# # max_mqueue_len
# # The queue length in-flight window
# # This is essential for performance and memory consumption
# #
# # Hot updatable
# # Value: 1-infinity
max_mqueue_len = 2048
# # Unsupported now
max_inflight_window = 2048
max_awaiting_rel = 10s
await_rel_timeout = 10s
# # retry_interval (s)
# # The retry interval is nano qos duration which also controls timer
# # interval of each pipe
# #
# # Hot updatable
# # Value: 1-infinity
retry_interval = 10s
# # The backoff for MQTT keepalive timeout.
# # broker will discolse client when there is no activity for
# # 'Keepalive * backoff * timeout.
# #
# # Hot updatable
# # Value: Float > 0.5
keepalive_multiplier = 1.25
# # property_size
# # The max size for a MQTT user property
# #
# # Hot updatable
# # Value: 1-infinity
property_size = 32
}
listeners.tcp {
# # bind
# # Connect with the host and port
# #
# # Value: host:port
bind = "0.0.0.0:1883"
}
listeners.tcp.default_1 {
bind = "0.0.0.0:1884"
}
listeners.tcp.default_2 {
bind = "0.0.0.0:1885"
}
# #============================================================
# # TLS/SSL
# #============================================================
listeners.ssl {
# # tls url
# #
# # Value: "host:port"
bind = "0.0.0.0:8883"
# # tls key password
# # String containing the user's password. Only used if the private keyfile
# # is password-protected.
# #
# # Value: String
# key_password="yourpass"
# # tls keyfile
# # Path to the file containing the user's private PEM-encoded key.
# #
# # Value: File
keyfile = "/etc/certs/key.pem"
# # tls cert file
# # Path to a file containing the user certificate.
# #
# # Value: File
certfile = "/etc/certs/cert.pem"
# # tls ca cert file
# # Path to the file containing PEM-encoded CA certificates. The CA certificates
# # are used during server authentication and when building the client certificate chain.
# #
# # Value: File
cacertfile = "/etc/certs/cacert.pem"
# # A server only does x509-path validation in mode verify_peer,
# # as it then sends a certificate request to the client (this
# # message is not sent if the verify option is verify_none).
# # You can then also want to specify option fail_if_no_peer_cert.
# #
# # Value: true: verify_peer | false: verify_none
verify_peer = false
# # Used together with {verify, verify_peer} by an SSL server. If set to true,
# # the server fails if the client does not have a certificate to send, that is,
# # sends an empty certificate.
# #
# # Value: true | false
fail_if_no_peer_cert = false
}
listeners.ssl.default_1 {
bind = "0.0.0.0:8881"
keyfile = "/etc/certs/key.pem"
certfile = "/etc/certs/cert.pem"
cacertfile = "/etc/certs/cacert.pem"
verify_peer = false
fail_if_no_peer_cert = false
}
listeners.ssl.default_2 {
bind = "0.0.0.0:8884"
keyfile = "/etc/certs/key.pem"
certfile = "/etc/certs/cert.pem"
cacertfile = "/etc/certs/cacert.pem"
verify_peer = false
fail_if_no_peer_cert = false
}
# #============================================================
# # WebSocket
# #============================================================
listeners.ws {
# # websocket url
# #
# # Value: "host:port/path"
bind = "0.0.0.0:8083/mqtt"
}
listeners.wss {
# # websocket tls url
# #
# # Value: "host:port/path"
bind = "0.0.0.0:8086/mqtt"
}
# # -------------------- SQLite Config -------------------- ##
sqlite {
# # Max message limitation for caching
# # ( 0 means ineffective )
# # Value: 1-infinity
disk_cache_size = 102400
# # Mounted file path
# #
# # Value: path
# mounted_file_path="/tmp/"
# # The threshold of flushing messages to flash.
# #
# # Hot updatable
# # Value: 1-infinity
flush_mem_threshold = 100
# # Resend interval (ms)
# # The interval for resending the messages after failure recovered. (not related to trigger)
# #
# # Value: 1-infinity
resend_interval = 5000
}
# #============================================================
# # Http server
# #============================================================
http_server {
# # http server port
# #
# # Value: 0 - 65535
port = 8081
# # limit connector
# # Handle a specified maximum number of outstanding requests
# #
# # Value: 1-infinity
limit_conn = 32
# # http server username
# #
# # Value: String
username = admin
# # http server password
# #
# # Value: String
password = public
# # http server auth type
# # If set auth_type=jwt, make sure you have built JWT dependency with `-DENABLE_JWT=ON` first.
# #
# # Value: String basic | jwt
auth_type = basic
jwt {
# # http server jwt public key file
# # Used together with 'http_server.auth_type=jwt',
# # Path to the file containing the user's private key.
# #
# # Value: File
public.keyfile = "/etc/certs/jwt/jwtRS256.key.pub"
}
}
# # ------------------ Logging Config ------------------ ##
log {
# # Where to emit the logs.
# #
# # - file: write logs to file
# # - console: write logs to standard I/O
# # - syslog: write logs to syslog
# # Value: file | console | syslog
# # Example: file,console,syslog
to = [file, console]
# # The log severity level.
# #
# # Value: trace | debug | info | warn | error | fatal
# #
# # Note: Only the messages with severity level higher than or equal to
# # this level will be logged.
# #
# # Default: warn
level = warn
# # The dir for log files.
# #
# # Value: Folder
dir = "/tmp"
# # The log filename for logs of level specified in "log.level".
# #
# # Value: String
# # Default: nanomq.log
file = "nanomq.log"
rotation {
# # Maximum size of each log file.
# #
# # Value: Number
# # Default: 10M
# # Supported Unit: KB | MB | GB
size = 10MB
# # Maximum rotation count of log files.
# #
# # Value: Number
# # Default: 5
count = 5
}
}
# #============================================================
# # WebHook
# #============================================================
# webhook {
# ## Webhook URL
# ##
# ## Value: String
# url="http://127.0.0.1:80"
# ## HTTP Headers
# ##
# ## Example:
# ## 1. web.hook.headers.content-type="application/json"
# ## 2. web.hook.headers.accept="*"
# ##
# ## Value: String
# headers.content-type="application/json"
# ## The encoding format of the payload field in the HTTP body
# ## The payload field only appears in the on_message_publish and on_message_delivered actions
# ##
# ## Value: plain | base64 | base62
# body.encoding="plain"
# ## Connection process pool size
# ##
# ## Value: Number
# pool_size=32
#
# # Unsupport now
# # tls {
# # keyfile="/etc/certs/key.pem"
# # certfile="/etc/certs/cert.pem"
# # cacertfile="/etc/certs/cacert.pem"
# # }
#
# }
webhook {
url = "http://127.0.0.1:80"
headers.content-type = "application/json"
body.encoding = plain
pool_size = 32
events = [
{
# # Webhook event.
# #
# # Value: String
# # Supported event list:
# # event: on_client_connect
# # event: on_client_connack
# # event: on_client_connected
# # event: on_client_disconnected
# # event: on_client_subscribe
# # event: on_client_unsubscribe
# # event: on_session_subscribed
# # event: on_session_unsubscribed
# # event: on_session_terminated
# # event: on_message_publish
# # event: on_message_delivered
# # event: on_message_acked
event = "on_message_publish"
# # Webhook topic.
# #
# # Value: String
# # Support on message publish
topic = "a/b/c"
}
{
event = "on_client_connack"
}
]
}
auth {
# # anonymous
# # allow anonymous login
# #
# # Hot updatable
# # Value: true | false
allow_anonymous = true
# # Allow or deny if no ACL rules matched.
# #
# # Value: allow | deny
no_match = allow
# # The action when acl check reject current operation
# #
# # Value: ignore | disconnect
# # Default: ignore
deny_action = ignore
cache = {
# # The maximum count of ACL entries can be cached for a client.
# #
# # Value: Integer greater than 0
# # Default: 32
max_size = 32
# # The time after which an ACL cache entry will be deleted
# #
# # Value: Duration
# # Default: 1 minute
ttl = 1m
}
# # This is password conf file.
# #
# # Value: path string
# # Default: "/etc/pwd.conf"
password = {include "/etc/nanomq_pwd.conf"}
# # This is acl conf file.
# #
# # Value: path string
# # Default: "/etc/acl.conf"
acl = {include "/etc/nanomq_acl.conf"}
http_auth = {
auth_req {
# # HTTP URL API path for Auth Request
# #
# # Value: URL
# #
# # Examples: http://127.0.0.1:80/mqtt/auth, https://[::1]:80/mqtt/auth
url = "http://127.0.0.1:80/mqtt/auth"
# # HTTP Request Method for Auth Request
# #
# # Value: post | get
method = post
# # HTTP Request Headers for Auth Request, Content-Type header is configured by default.
# # The possible values of the Content-Type header: application/x-www-form-urlencoded, application/json
# #
# # Examples: auth.http.auth_req.headers.accept = */*
headers.content-type = "application/x-www-form-urlencoded"
# # Parameters used to construct the request body or query string parameters
# # When the request method is GET, these parameters will be converted into query string parameters
# # When the request method is POST, the final format is determined by content-type
# #
# # Available Variables:
# # - %u: username
# # - %c: clientid
# # - %a: ipaddress
# # - %r: protocol
# # - %P: password
# # - %p: sockport of server accepted
# # - %C: common name of client TLS cert
# # - %d: subject of client TLS cert
# #
# # Value: <K1>=<V1>,<K2>=<V2>,...
params = {clientid = "%c", username = "%u", password = "%p"}
# Unsupport now
# tls {
# keyfile="/etc/certs/key.pem"
# certfile="/etc/certs/cert.pem"
# cacertfile="/etc/certs/cacert.pem"
# }
}
super_req {
url = "http://127.0.0.1:80/mqtt/superuser"
method = "post"
headers.content-type = "application/x-www-form-urlencoded"
params = {clientid = "%c", username = "%u", password = "%p"}
# Unsupport now
# tls {
# keyfile="/etc/certs/key.pem"
# certfile="/etc/certs/cert.pem"
# cacertfile="/etc/certs/cacert.pem"
# }
}
# # HTTP ACL request is unsupported.
acl_req {
url = "http://127.0.0.1:8991/mqtt/acl"
method = "post"
headers.content-type = "application/x-www-form-urlencoded"
params = {clientid = "%c", username = "%u", access = "%A", ipaddr = "%a", topic = "%t", mountpoint = "%m"}
# Unsupport now
# tls {
# keyfile="/etc/certs/key.pem"
# certfile="/etc/certs/cert.pem"
# cacertfile="/etc/certs/cacert.pem"
# }
}
# # Time-out time for the request.
# #
# # Value: Duration
# # -h: hour, e.g. '2h' for 2 hours
# # -m: minute, e.g. '5m' for 5 minutes
# # -s: second, e.g. '30s' for 30 seconds
# #
# # Default: 5s
timeout = 5s
# # Connection time-out time, used during the initial request,
# # when the client is connecting to the server.
# #
# # Value: Duration
# # -h: hour, e.g. '2h' for 2 hours
# # -m: minute, e.g. '5m' for 5 minutes
# # -s: second, e.g. '30s' for 30 seconds
# #
# # Default: 5s
connect_timeout = 5s
# # Connection process pool size
# #
# # Value: Number
pool_size = 32
}
}
# #====================================================================
# # MQTT Broker Bridge
# #====================================================================
# # Here, you can use the include syntax of HOCON to put the
# # configuration file of the bridge into nanomq_bridge.conf.
# # include "path/to/nanomq_bridge.conf"
bridges.mqtt.emqx1 {
# # Bridge address: host:port .
# #
# # Value: String
# # Example: mqtt-tcp://127.0.0.1:1883
# # tls+mqtt-tcp://127.0.0.1:8883
# # mqtt-quic://54.75.171.11:14567
server = "mqtt-tcp://127.0.0.1:1883"
# # Protocol version of the bridge.
# #
# # Value: Enum
# # - 5: mqttv5
# # - 4: mqttv311
# # - 3: mqttv31
proto_ver = 5
# # The ClientId of a remote bridge.
# # Default random string.
# #
# # Value: String
# clientid="bridge_client"
# # Ping: interval of a downward bridge.
# #
# # Value: Duration
# # Default: 10 seconds
keepalive = 60s
# # The maximum backoff timeout.
# # Reconnect after no more than backoff_max when bridge connection lost.
# #
# # Value: Duration
# # Default: 60s
backoff_max = 60s
# # The Clean start flag of a remote bridge.
# #
# # Value: boolean
# # Default: false
# #
# # NOTE: Some IoT platforms require clean_start
# # must be set to 'true'
clean_start = false
# # The username for a remote bridge.
# #
# # Value: String
username = username
# # The password for a remote bridge.
# #
# # Value: String
password = passwd
# # Properties for MQTT V5
conn_properties = {
# # Maximum Packet Size
# #
# # If the Maximum Packet Size is not present, no limit on the packet size is imposed beyond
# # the limitations in the protocol as a result of the remaining length encoding and the protocol header sizes.
# # Value: 1 ~ 4294967295
maximum_packet_size = 1024
# # Receive Maximum
# #
# # The Client uses this value to limit the number of QoS 1 and QoS 2 publications that it is willing to process concurrently.
# # There is no mechanism to limit the QoS 0 publications that the Server might try to send.
# # The value of Receive Maximum applies only to the current Network Connection.
# # If the Receive Maximum value is absent then its value defaults to 65,535.
# #
# # Value: 1 ~ 65535
receive_maximum = 65535
# # Topic Alias Maximum
# #
# # If the Topic Alias Maximum property is absent, the default value is 0.
# # This value indicates the highest value that the Client will accept as a Topic Alias sent by the Server.
# # The Client uses this value to limit the number of Topic Aliases that it is willing to hold on this Connection.
# # Default: 0
# # Value: 0 ~ 65535
topic_alias_maximum = 0
# # Request Problem Information
# #
# # If the Request Problem Information is absent, the value of 1 is used.
# # The Client uses this value to indicate whether the Reason String or User Properties are sent in the case of failures.
# # If the value of Request Problem Information is 0, the Server MAY return a Reason String or User Properties on a CONNACK or DISCONNECT packet,
# # but MUST NOT send a Reason String or User Properties on any packet other than PUBLISH, CONNACK, or DISCONNECT.
# # If the value is 0 and the Client receives a Reason String or User Properties in a packet other than PUBLISH, CONNACK, or DISCONNECT,
# # it uses a DISCONNECT packet with Reason Code 0x82 (Protocol Error) as described in section 4.13 Handling errors.
# # If this value is 1, the Server MAY return a Reason String or User Properties on any packet where it is allowed.
# #
# # Default: 1
# # Value: 0 | 1
request_problem_infomation = 1
# # Request Response Information
# #
# # If the Request Response Information is absent, the value of 0 is used.
# # The Client uses this value to request the Server to return Response Information in the CONNACK.
# # A value of 0 indicates that the Server MUST NOT return Response Information.
# # If the value is 1 the Server MAY return Response Information in the CONNACK packet.
# #
# # Default: 0
# # Value: 0 | 1
request_response_infomation = 0
# # Session Expiry Interval
# #
# # If the Session Expiry Interval is absent the value 0 is used.
# # If it is set to 0, or is absent, the Session ends when the Network Connection is closed.
# # If the Session Expiry Interval is 4294967295 (UINT_MAX), the Session does not expire.
# #
# # Value: 0 ~ 4294967295
session_expiry_interval = 0
# # User Property
# #
# # The User Property is allowed to appear multiple times to represent multiple name, value pairs.
# # The same name is allowed to appear more than once.
# # Value: Map[key(String) - value(String)]
user_property = {
key1 = value1
key2 = value2
}
}
will {
# # Will topic
topic = "will_topic"
# # Will QoS
qos = 1
# # Will paylad retain flag
retain = false
# # Will payload
payload = "will_message"
# # Will properties
properties = {
# # Payload Format Indicator
# #
# # 0 (0x00) Byte Indicates that the Will Message is unspecified bytes,
# # which is equivalent to not sending a Payload Format Indicator.
# #
# # 1 (0x01) Byte Indicates that the Will Message is UTF-8 Encoded Character Data.
# #
# # Default: 0
# # Value: 0 | 1
payload_format_indicator = 0
# # Message Expiry Interval
# #
# # If present, the Four Byte value is the lifetime of the Will Message in seconds
# # and is sent as the Publication Expiry Interval when the Server publishes the Will Message.
# #
# # If absent, no Message Expiry Interval is sent when the Server publishes the Will Message.
message_expiry_interval = 0
# # Content Type
# # The value of the Content Type is defined by the sending and receiving application.
content_type = ""
# # Response Topic
# # The presence of a Response Topic identifies the Will Message as a Request.
response_topic = ""
# # Correlation Data
# # The Correlation Data is used by the sender of the Request Message to identify which request
# # the Response Message is for when it is received.
correlation_data = ""
# # Will Delay Interval
# #
# # If the Will Delay Interval is absent, the default value is 0 and there is no delay
# # before the Will Message is published.
# #
# # The Server delays publishing the Clients Will Message until the Will Delay Interval
# # has passed or the Session ends, whichever happens first.
# # If a new Network Connection to this Session is made before the Will Delay Interval has passed, the Server MUST NOT send the Will Message
will_delay_interval = 0
# # User Property
# #
# # The User Property is allowed to appear multiple times to represent multiple name, value pairs.
# # The same name is allowed to appear more than once.
# # Value: Map[key(String) - value(String)]
user_property = {
key1 = value1
key2 = value2
}
}
}
# # Ssl config ##
## ssl {
## # # Ssl key password
## # # String containing the user's password. Only used if the private keyfile
## # # is password-protected.
## # #
## # # Value: String
## key_password = "yourpass"
## # # Ssl keyfile
## # # Path of the file containing the client's private key.
## # #
## # # Value: File
## keyfile = "/etc/certs/key.pem"
## # # Ssl cert file
## # # Path of the file containing the client certificate.
## # #
## # # Value: File
## certfile = "/etc/certs/cert.pem"
## # # Ssl ca cert file
## # # Path of the file containing the server's root CA certificate.
## # #
## # # Value: File
## cacertfile = "/etc/certs/cacert.pem"
##}
# # Topics that need to be forward to IoTHUB
# #
# # Value: String
forwards = [
{
# # This is for Topic reflection, if you want the vanila way:
# # Leave `remote_topic=""` to preserve the original topic in msg
# #
# # Value: String
remote_topic = "fwd/topic1"
# # The topic filter of which to forward to remote broker
# #
# # Local topic means the original topic of locale publish msg
# # msgs from local_topic will be reflected to remote_topic
# # This must present to enable the forwarding of bridging
# # Value: String
local_topic = "topic1"
# # Retain is used to override the ratain flag in the msg is about
# # to forward to remote. (0|1) stand for override the retain flag with (0|1).
# # 2 or not set this value will keep retain flag as it is.
# # Value: Number (0|1|2)
# # Default: 2
# retain = 2
# # Prefix string adds to the remote topic.(or original topic if you leave remote_topic as "")
# # Value: String
# # Default: NULL
# prefix = ""
# # Suffix string adds to the remote topic.(or original topic if you leave remote_topic as "")
# # Value: String
# # Default: NULL
# suffix = ""
}
{
remote_topic = "fwd/topic2"
local_topic = "topic2"
}
]
# #--------------------------------------------------------------------
# # The following config params only effective when set QUIC as the
# # transport layer of bridging connection (mqtt-quic://{host}:{port})!
# #
# # Ping: interval of a sending keepalive packet via QUIC transport.
# #
# # Value: Duration
# # Default: 120 seconds
quic_keepalive = 120s
# # Idle Timeout: How long a connection can go idle before it is gracefully shut down.
# # 0 to disable timeout, which may lost disconnect event msg.
# # Value: Duration
# # Default: 120 seconds
quic_idle_timeout = 120s
# # Disconnect Timeout: How long to wait for an ACK before declaring
# # a path dead and disconnecting, This affects stream living time.
# # Value: Duration
# # Default: 20 seconds
quic_discon_timeout = 20s
# # Handshake Timeout: the Max time NanoMQ waits for establishing QUIC connection
# # How long a handshake can idle before it is discarded
# # Value: Duration
# # Default: 60 seconds
quic_handshake_timeout = 60s
# # Send Idle Timeout: Reset congestion control after being idle `SendIdleTimeout`
# # Value: Duration
# # Default: 60 seconds
quic_send_idle_timeout = 2s
# # Initial RTT: Initial RTT estimate. (ms)
# # RTT: round trip time
# # Default: 800ms
quic_initial_rtt_ms = 800ms
# # Max Ack Delay: How long to wait after receiving data before sending an ACK.
# # Value: Duration
# # Default: 100ms
quic_max_ack_delay_ms = 100ms
# # multi-stream mode: enable or disable the multi-stream bridging mode
# # Warning: This is a feature WIP. Do not enable it!
# # Value: True/False
# # Default: False
quic_multi_stream = false
# # qos_priority: send QoS 1/2 msg in high prority
# # QoS 0 messages remain as same
# # Value: true/false
# # Default: true
quic_qos_priority = true
# # 0RTT: enable or diable 0RTT, 0RTT is a feature of QUIC to re-establish
# # connection quickly.
# # Value: true/false
# # Default: true
quic_0rtt = true
subscription = [
{
# # The topic filter of which subscribe to remote broker
# # This must present to enable the subscription of bridging
# #
# # Value: String
remote_topic = "cmd/topic3"
# # This is for Topic reflection, if you want the vanila way:
# # Leave `local_topic=""` to preserve the original topic in msg
# # Value: String
local_topic = "topic3"
# # Need to subscribe to remote topics QoS.
# # Please set QoS for each subscription topic
# # otherwise topic is invalid, NanoMQ won't sub to any topic
# # Value: Number
qos = 1
# # Retain is used to override the ratain flag in the msg is about
# # to forward to local. (0|1) stand for override the retain flag with (0|1).
# # 2 or not set this value will keep retain flag as it is.
# # Value: Number (0|1|2)
# # Default: 2
# # retain = 2
# # Retain As Published is used to tell broker what to do with retain flag.
# # If 1, message forwarded using this subscription have the RETAIN flag they were published with.
# # If 0, message forwarded using this subscription have the RETAIN flag set to 0.
# # Value: Number (0|1)
retain_as_published = 1
# # Retain Handling is used to tell broker whether retain message should be sent.
# # If Retain Handing is set to 0, send all retain messages.
# # If Retain Handing is set to 1, send retain messages only if this subscription is not already exist. Otherwise do not send.
# # If Retain Handing is set to 2, do not send any retain message.
# # Value: Number (0|1|2)
retain_handling = 2
# # Prefix string adds to the local topic.(or original topic if you leave local_topic as "")
# # Value: String
# # Default: NULL
# prefix = ""
# # Suffix string adds to the local topic.(or original topic if you leave local_topic as "")
# # Value: String
# # Default: NULL
# suffix = ""
}
{
remote_topic = "cmd/topic4"
local_topic = "topic4"
qos = 2
}
]
# # Properties of subscribe for MQTT V5
sub_properties {
# # Subscription Identifier
# #
# # The Subscription Identifier can have the value of 1 to 268,435,455.
# # It is a Protocol Error if the Subscription Identifier has a value of 0.
# # It is a Protocol Error to include the Subscription Identifier more than once.
# # The Subscription Identifier is associated with any subscription created or modified as the result of this SUBSCRIBE packet.
# # If there is a Subscription Identifier, it is stored with the subscription.
# # If this property is not specified, then the absence of a Subscription Identifier is stored with the subscription.
# #
# # Value: 1 ~ 268,435,455
identifier = 1
# # User Property
# #
# # The User Property is allowed to appear multiple times to represent multiple name, value pairs.
# # The same name is allowed to appear more than once.
# #
# # Value: Map[key(String) - value(String)]
user_property = {
key1 = value1
key2 = value2
}
}
# # Hybrid bridging: enable or disable the hybrid bridging mode
# # Value: True/False
# # Default: False
hybrid_bridging = false
# # Hybrid servers
# # When hybrid mode is enabled and the connection to server is
# # disconnected. Bridge will switch to hybrid_servers in roundrobin.
# # Value: Array
# # Default: []
hybrid_servers = ["mqtt-quic://127.1:14567", "mqtt-tcp://127.1:1883"]
# # max_parallel_processes
# # Handle a specified maximum number of outstanding requests
# #
# # Value: 1-infinity
max_parallel_processes = 2
# # max send queue length
# # Handle a specified maximum number of message send queue length
# #
# # Value: 1-infinity
max_send_queue_len = 32
# # max receive queue length
# # Handle a specified maximum number of message receive queue length
# #
# # Value: 1-infinity
max_recv_queue_len = 128
# # Resend interval (ms)
# # The interval for resending the messages after failure recovered. (not related to trigger)
# # move from cache to bridge since 0.22.8
# # Value: 1-infinity (uint64)
resend_interval = 5000
# # Resend wait time (ms)
# # The waiting time for resending the messages after it is publiushed.
# # Tips: set it longer than keepalive if you dont want too much duplicated msg
# # Value: 1-infinity (uint64)
resend_wait = 3000
# # max Ack wait time for each QoS msg (ms)
# # The waiting time for Acknowledgment of every QoS msg. Does not affect normal sending.
# # Tips: QoS msg requries a delivered ack, which occupies an AIO.
# # set a max timeout time to cancel the ack action.
# # once it is canceled, there is no more retrying of this msg.
# # Value: 1-infinity (uint64)
cancel_timeout = 8000
}
# # The configuration of this cache is shared by all MQTT bridges.
bridges.mqtt.cache {
# # Max message limitation for caching
# # ( 0 means ineffective )
# # Value: 1-infinity
disk_cache_size = 102400
# # Mounted file path
# #
# # Value: path
# mounted_file_path="/tmp/"
# # The threshold of flushing messages to flash.
# #
# # Value: 1-infinity
flush_mem_threshold = 100
}
# #====================================================================
# # AWS IoT Core Bridge
# #====================================================================
bridges.aws.c1 {
# # Aws address: host:port .
# #
# # Value: String
server = "127.0.0.1:8883"
# # Protocol version of the bridge.
# #
# # Value: Enum
# # - 5: mqttv5
# # - 4: mqttv311
proto_ver = 4
# # The ClientId of a remote bridge.
# # Default random string.
# #
# # Value: String
clientid = "aws_bridge_client"
# # Ping interval of a down bridge.
# #
# # Value: Duration
# # Default: 10 seconds
keepalive = 60s
# # The Clean start flag of a remote bridge.
# #
# # Value: boolean
# # Default: true
# #
# # NOTE: Some IoT platforms require clean_start
# # must be set to 'true'
clean_start = true
# # The username for a remote bridge.
# #
# # Value: String
# username = "username"
# # The password for a remote bridge.
# #
# # Value: String
# password = "passwd"
# ssl {
# # # Ssl key password
# # # String containing the user's password. Only used if the private keyfile
# # # is password-protected.
# # #
# # # Value: String
# key_password = "yourpass"
# # # Ssl keyfile
# # # Path of the file containing the client's private key.
# # #
# # # Value: File
# keyfile = "/etc/certs/key.pem"
# # # Ssl cert file
# # # Path of the file containing the client certificate.
# # #
# # # Value: File
# certfile = "/etc/certs/cert.pem"
# # # Ssl ca cert file
# # # Path of the file containing the server's root CA certificate.
# # #
# # # This certificate is used to identify the AWS IoT server and is publicly
# # # available.
# # #
# # # Value: File
# cacertfile = "/etc/certs/cacert.pem"
# }
# # Topics that need to be forward to IoTHUB
# #
# # Value: String
forwards = [
{
# # Need to forward to remote broker topics
# #
# # Value: String
remote_topic = "fwd/topic1"
# # topic reflection with remote_topic
# #
# # Value: String
local_topic = "topic1"
}
{
remote_topic = "fwd/topic2"
local_topic = "topic2"
}
]
subscription = [
{
# # Need to subscribe to remote broker topics
# #
# # Value: String
remote_topic = "cmd/topic1"
# # topic reflection with remote_topic
# #
# # Value: String
local_topic = "topic1"
# # Need to subscribe to remote topics QoS.
# #
# # Value: Number
qos = 1
},
{
remote_topic = "cmd/topic2"
local_topic = "topic2"
qos = 2
}
]
# # max_parallel_processes
# # Handle a specified maximum number of outstanding requests
# #
# # Value: 1-infinity
max_parallel_processes = 2
# # Ssl config ##
# # Ssl config is invalid when working in MQTT over QUIC mode ##
}
# #============================================================
# # MQTT Rule Engine
# #============================================================
rules.sqlite {
# # Rule engine option SQLite3 database path
# # Rule engine db path, default is exec path.
# #
# # Value: File
path = "/tmp/sqlite_rule.db"
rules = [
{
# # Rule engine option sql
# # Rule engine sql clause.
# #
# # Value: String
sql = "SELECT payload.x.y as y, payload.z as z FROM \"#\" WHERE y > 10 and z != 'str'"
# # Rule engine option SQLite3 database table name
# # Rule engine db table name.
# #
# # Value: String
table = broker
},
{
sql = "SELECT topic, payload FROM \"abc\""
table = broker1
}
]
}
# #====================================================================
# # MQTT Rule Engine for Repub
# #====================================================================
rules.repub {
rules = [
{
# # Repub address: host:port .
# #
# # Value: String
# # Example: mqtt-tcp://127.0.0.1:1883
server = "mqtt-tcp://localhost:1883"
# # Repub topic .
# #
# # Value: String
# # Example: topic/repub
topic = "topic/repub1"
# # Protocol version of the Repub.
# #
# # Value: Enum
# # - 5: mqttv5
# # - 4: mqttv311
# # - 3: mqttv31
proto_ver = 4
# # The ClientId of a Repub client.
# # Default random string.
# #
# # Value: String
clientid = "repub_client1"
# # Ping interval of a Repub client.
# #
# # Value: Duration
# # Default: 60 seconds
keepalive = 60s
# # The Clean start flag of a Repub client.
# #
# # Value: boolean
# # Default: true
# #
# # NOTE: Some IoT platforms require clean_start
# # must be set to 'true'
clean_start = true
# # The username for a Repub client.
# #
# # Value: String
username = username
# # The password for a Repub.
# #
# # Value: String
password = passwd
# # Rule engine option sql
# # Rule engine sql clause.
# #
# # Value: String
sql = "SELECT payload.x.y as y, payload.z as z FROM \"#\" WHERE y > 10 and z != 'str'"
},
{
server = "mqtt-tcp://localhost:1883"
topic = "topic/repub2"
proto_ver = 4
clientid = "repub_client2"
keepalive = 60s
clean_start = true
username = username
password = passwd
sql = "SELECT topic, payload FROM \"abc\""
}
]
}
# #====================================================================
# # MQTT Rule Engine for Mysql
# #====================================================================
# # Currently, MySQL rule only supports the configuration of one database.
rules.mysql.mysql_rule_db {
conn = {
# # The host for a mqsql client.
# #
# # Value: String
host = localhost
# # The username for a mqsql client.
# #
# # Value: String
username = username
# # The password for a mysql client.
# #
# # Value: String
password = password
# # Rule engine option mysql database name
# # Rule engine db path, default is exec path.
# #
# # Value: File
database = db_name
}
rules = [
{
# # Rule engine option mysql database table name
# # Rule engine db table name.
# #
# # Value: String
table = broker
# # Rule engine option sql
# # Rule engine sql clause.
# #
# # Value: String
sql = "SELECT payload.x.y as y, payload.z as z FROM \"#\" WHERE y > 10 and z != 'str'"
},
{
table = broker1
sql = "SELECT * FROM \"abc\""
}
]
}
# #====================================================================
# # Exchange configuration for Embedded Messaging Queue
# #====================================================================
# # Initalize multiple MQ exchanger by giving them different name (mq1)
exchange_client.mq1 {
# # Currently NanoMQ only support one MQ object. URL shall be exactly same.
exchange_url = "tcp://127.0.0.1:10000"
# # exchanges contains multiple MQ exchanger
exchange {
# # MQTT Topic for filtering messages and saving to queue
topic = "exchange/topic1",
# # MQ name
name = "exchange_no1",
# # MQ category. Only support Ringbus for now
ringbus = {
# # ring buffer name
name = "ringbus",
# # max length of ring buffer (msg count)
cap = 1000,
# # 0: RB_FULL_NONE: When the ringbus is full, no action is taken and the message enqueue fail
# # 1: RB_FULL_DROP: When the ringbus is full, the data in the ringbus is discarded
# # 2: RB_FULL_RETURN: When the ringbus is full, the data in the ringbus is taken out and returned to the aio
# # 3: RB_FULL_FILE: When the ringbus is full, the data in the ringbus is written to the file
#
# # Value: 0-4
# # Default: 0
fullOp = 2
}
}
}
# #====================================================================
# # Parquet configuration (Apply to Exchange/Messaging_Queue)
# #====================================================================
parquet {
# # Parquet compress type.
# #
# # Value: uncompressed | snappy | gzip | brotli | zstd | lz4
compress = uncompressed
# # Encryption options
encryption {
# # Set a key retrieval metadata.
# #
# # Value: String
key_id = kf
# # Parquet encryption key.
# #
# # Value: String key must be either 16, 24 or 32 bytes.
key = "0123456789012345"
# # Set encryption algorithm. If not called, files
# # will be encrypted with AES_GCM_V1 (default).
# #
# # Value: AES_GCM_CTR_V1 | AES_GCM_V1
type = AES_GCM_V1
}
# # The dir for parquet files.
# #
# # Value: Folder
dir = "/tmp/nanomq-parquet"
# # The prefix of parquet files written.
# #
# # Value: string
file_name_prefix = ""
# # Maximum rotation count of parquet files.
# #
# # Value: Number
# # Default: 5
file_count = 5
# # The max size of parquet file written.
# #
# # Default: 10M
# # Value: Number
# # Supported Unit: KB | MB | GB
file_size = 1KB
# # The max number of searches per second.
# #
# # Default: 5
# # Value: Number
limit_frequency = 5
}
plugin {
libs = [{
path = "/path/to/plugin_user_property.so"
}]
}