DrmagicE / gmqtt

Gmqtt is a flexible, high-performance MQTT broker library that fully implements the MQTT protocol V3.x and V5 in golang
MIT License
989 stars 220 forks source link

请问retain 类型的消息可以被持久化存储吗? #164

Closed leonscriptcc closed 2 years ago

leonscriptcc commented 2 years ago

老哥你好,我在使用gmqtt中发现一个问题,我配置了redis做持久化,但是好像retain类型的消息是不会存储到redis中的,请问是这样的吗?

DrmagicE commented 2 years ago

嗯,不支持的,retain要额外配置,现在只有内存。 一种可能的支持方式,写一个redis的实现,实现这个接口。 https://github.com/DrmagicE/gmqtt/blob/master/retained/interface.go 然后在server.New的时候用这个option改掉默认的retain。 https://github.com/DrmagicE/gmqtt/blob/master/server/options.go#L55

原生不支持..得自己实现这套逻辑了

leonscriptcc commented 2 years ago

谢谢你的回复,实现这个接口以后,我重启broker后,是不是会自动去redis中读取retain消息呢?

DrmagicE commented 2 years ago

嗯,理论上是的。不过没有测试过

leonscriptcc commented 2 years ago

谢谢老哥,我看可源码,因该是可以的,我会使用你建议的方法来改造下,再次感谢你的回复