环境
- EMQX 版本:5.0.15
- 操作系统版本:Centos7
重现此问题的步骤
- 配置Webhook,并配置转发规则,pulish几条数据
- 杀掉http服务,并再次发送几条数据
- 重启http服务,观察数据是否会丢失
具体步骤如下
第一次测试步骤:
-
首先启动http服务,并发送2条数据,此时数据能正常接收
-
关闭http服务,并再次发送4条消息

-
再次启动http服务,观察有几条消息
这里只接收到3条数据 ,333,444,666成功接受到,但是555丢失了
第二次测试步骤:
-
首先启动http服务,并发送2条数据,此时数据能正常接收
-
关闭http服务,并再次发送4条消息
-
再次启动http服务,观察有几条消息
这里只接收到2条数据 ,333,444成功接受到,但是555,666丢失了,而且,数据是先打印444,再打印333,数据貌似乱序了
我的问题
我想问一下,webhook能否保证在http服务异常的情况下,数据不丢失?需要配置什么嘛?
t1ger
2
乱序是因为 EMQX 底层采用了进城池来提高 HTTP 吞吐性能,我们会保证来自同一个客户端的请求都会命中到同一个进程中去,这样就可以保证顺序。你这里的测试中,是不是 Client ID 发生了变化?
另外目前的 WebHook 实现是不保证服务异常的情况下请求不丢失的,请求失败了,就会放弃当前请求。
我的ClientID没有发生变化,代码里是写死的。另外,如果想保证服务异常情况下数据不丢失,是不是只能通过自己编写mqtt的subscribe代码,并设置clean_session=Flase?还有其他方法没?
t1ger
4
或者使用企业版,企业版可以让消息在被消费后才删除。
我这边试用了一下企业版,和我用开源版测试的情况是一样的,在httpserver断开期间发送的消息,也会丢失一部分
t1ger
6
企业版和开源版 WebHook 的功能并无差异,我的意思是使用企业版的 离线消息 功能