GH-9428: Emit MQTT delivery events even if share client instance
Fixes: #9428 Issue link: https://github.com/spring-projects/spring-integration/issues/9428 When `ClientManager` is used for MQTT channel adapters, a `MqttMessageDeliveredEvent` is not emitted since callback for the `ClientManager` is not aware about `deliveryComplete` * Use a `MqttActionListener` abstraction for the `publish` operation instead of a `deliveryComplete` from a common callback * Make some other refactoring into the `MqttPahoMessageHandler` and `Mqttv5PahoMessageHandler` extracting a common logic into their `AbstractMqttMessageHandler` superclass * Introduce an `MqttMessageNotDeliveredEvent` to be emitted from the `MqttActionListener.onFailure()` callback * Adapt mocks in the `MqttAdapterTests` for a new code flow * Add delivery events verification into the `ClientManagerBackToBackTests` * Fix race condition in the `ClientManagerBackToBackTests` Looks like the message can be consumed even before we just emit that `MqttMessageSentEvent`
This commit is contained in:
@@ -399,6 +399,7 @@ Certain application events are published by the adapters.
|
||||
For the MQTT v5 Paho client, this event is also emitted when the server performs a normal disconnection, in which case the `cause` of the lost connection is `null`.
|
||||
* `MqttMessageSentEvent` - published by the outbound adapter when a message has been sent, if running in asynchronous mode.
|
||||
* `MqttMessageDeliveredEvent` - published by the outbound adapter when the client indicates that a message has been delivered, if running in asynchronous mode.
|
||||
* `MqttMessageNotDeliveredEvent` - published by the outbound adapter when the client indicates that a message has not been delivered, if running in asynchronous mode.
|
||||
* `MqttSubscribedEvent` - published by the inbound adapter after subscribing to the topics.
|
||||
|
||||
These events can be received by an `ApplicationListener<MqttIntegrationEvent>` or with an `@EventListener` method.
|
||||
|
||||
@@ -72,5 +72,6 @@ See xref:sftp/session-factory.adoc[SFTP Session Factory] for more information.
|
||||
=== MQTT Support Changes
|
||||
|
||||
Multiple instances of `MqttPahoMessageDrivenChannelAdapter` and `Mqttv5PahoMessageDrivenChannelAdapter` can now be added at runtime using corresponding `ClientManager` through `IntegrationFlowContext`
|
||||
Also a `MqttMessageNotDeliveredEvent` event has been introduced to emit when action callback reacts to the delivery failure.
|
||||
See xref:mqtt.adoc[MQTT Support] for more information.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user