lotuc.xnfun.core.transport-mqtt
MQTT implementation for lotuc.xnfun.core.transport/XNFunTransport.
We encode our transferring data into MQTT’s topic and payload.
- create-send-data: Convert our data to topic and payload to be sent.
- create-sub-data:: Convert our subscription to topic filter and a message adapter. The message adapter adapts the received payload & topic to the message sent and pass it to the handler function.
Topics:
- Node heartbeat:
<prefix>/<ver>/registry/hb/<node-id> - Request:
<prefix>/<ver>/rpc/req/<callee-node-id>/<caller-node-id>/<request-id> - Response:
<prefix>/<ver>/rpc/resp/<caller-node-id>/<request-id>/<callee-node-id>
The <ver> is now constantly v0. You can specify <prefix> when creating the transport with make-mqtt-transport.
create-send-data
multimethod
Convert the message to MQTT topic & payload.
Arguments: [node-id, {:as msg :keys [typ data}]
Returns: [topic, payload]
create-sub-data
multimethod
Create a topic filter and a message adapter for subscription.
The message adapter convert the MQTT topic & payload to the sent message for handler-fn’s usage.
Arguments: [node-id {:as subscription :keys [handle-fn]} typ]
node: current node
Returns: [topic-filter, message-adapter]
make-mqtt-transport
(make-mqtt-transport node-id {:as mqtt-transport, :keys [topic-prefix mqtt-config]})Create the mqtt transport for node node-id using the given transport configuration mqtt-transport.
MQTT transport configuration mqtt-trans-port contains two parts:
topic-prefix: all message’s topics would be prefixed with it, consider it as a namespace.mqtt-config: the mqtt connection configuration, it contains two part:broker: Connection uri, ex.tcp://127.0.0.1:1883:client-id(optional):connect-options: a map, all fields are optional::username(string):password(string or char array):auto-reconnect(bool):connection-timeout(int):clean-session(bool):keep-alive-interval(int):max-in-flight(int):will:{:keys [topic payload qos retain]}