diff --git a/plugin/mqtt.go b/plugin/mqtt.go index a6582dbe5..5530e2dde 100644 --- a/plugin/mqtt.go +++ b/plugin/mqtt.go @@ -118,6 +118,16 @@ func (m *Mqtt) newReceiver() (*msgHandler, error) { } err := m.client.Listen(m.topic, h.receive) + + // without timeout, wait briefly for a retained message- it arrives right after suback + if err == nil && m.timeout == 0 { + select { + case <-h.val.Done(): + case <-m.ctx.Done(): + case <-time.After(100 * time.Millisecond): + } + } + return h, err }