How to use chenile-mqtt transport module
Edit me
Purpose
chenile-mqtt implements Chenile pub/sub over MQTT using Eclipse Paho.
Use it when services publish/consume events via MQTT brokers.
Add Dependency
<dependency>
<groupId>org.chenile</groupId>
<artifactId>chenile-mqtt</artifactId>
</dependency>
Key Components
MqttPublisher: publishes Chenile events to MQTT topics.MqttSubscriber: subscribes to configured topics and pushes to Chenile pub/sub entrypoint.
Usage Pattern
- Include
chenile-pub-sub+chenile-mqttdependencies. - Configure broker properties and topic conventions.
- Define event subscriptions (
@EventsSubscribedTo) in Chenile controllers/services. - Publish with
ChenilePubabstraction; transport implementation handles MQTT delivery.
Required Properties
chenile.properties pointer:
chenile.properties=org/chenile/mqtt/test/TestMqtt-chenile.properties
Core Chenile keys:
chenile.module.name=chenile-mqtt
chenile.service.json.package=classpath*:org/chenile/core/service/*.json
chenile.event.json.package=classpath*:org/chenile/core/*.json
chenile.interceptors.path=org/chenile/core/chenile-core.xml
application.yml transport keys:
pubsub:
topic:
separator: /
clientID: someClient
enabled: true
mqtt:
connection:
ServerURIs: tcp://localhost:1883
keepAliveInterval: 120000
userName: emqx_test
password: emqx_test_password
cleanStart: true
receiveMaximum: 1000
automaticReconnect: true
session:
expiry: 12000
publish:
topic: /chenile/mqtt
qos: 2
retain: false
Test Pattern
Use cucumber-mqtt-utils MqttBaseTest for testcontainers-based broker setup.
Common Pitfalls
- Topic naming mismatch between publisher and subscriber definitions.
- Broker connection settings not mapped in test/prod profiles.
- Assuming pub/sub init runs when
pubsub.enabledis false.