如果WebHook对接的http服务挂了,期间发送的消息会在http服务重启后再次发送过来嘛?

环境

  • EMQX 版本:5.0.15
  • 操作系统版本:Centos7

重现此问题的步骤

  1. 配置Webhook,并配置转发规则,pulish几条数据
  2. 杀掉http服务,并再次发送几条数据
  3. 重启http服务,观察数据是否会丢失

具体步骤如下

第一次测试步骤:
  1. 首先启动http服务,并发送2条数据,此时数据能正常接收

  2. 关闭http服务,并再次发送4条消息
    image

  3. 再次启动http服务,观察有几条消息


    这里只接收到3条数据 ,333,444,666成功接受到,但是555丢失了

第二次测试步骤:
  1. 首先启动http服务,并发送2条数据,此时数据能正常接收

  2. 关闭http服务,并再次发送4条消息

  3. 再次启动http服务,观察有几条消息

这里只接收到2条数据 ,333,444成功接受到,但是555,666丢失了,而且,数据是先打印444,再打印333,数据貌似乱序了

我的问题

我想问一下,webhook能否保证在http服务异常的情况下,数据不丢失?需要配置什么嘛?

乱序是因为 EMQX 底层采用了进城池来提高 HTTP 吞吐性能,我们会保证来自同一个客户端的请求都会命中到同一个进程中去,这样就可以保证顺序。你这里的测试中,是不是 Client ID 发生了变化?

另外目前的 WebHook 实现是不保证服务异常的情况下请求不丢失的,请求失败了,就会放弃当前请求。

我的ClientID没有发生变化,代码里是写死的。另外,如果想保证服务异常情况下数据不丢失,是不是只能通过自己编写mqtt的subscribe代码,并设置clean_session=Flase?还有其他方法没?

或者使用企业版,企业版可以让消息在被消费后才删除。

我这边试用了一下企业版,和我用开源版测试的情况是一样的,在httpserver断开期间发送的消息,也会丢失一部分

企业版和开源版 WebHook 的功能并无差异,我的意思是使用企业版的 离线消息 功能