Exhook并发连接处理和性能优化

参考exhook-svr-python示例搭建测试环境,多线程配置max_workers=10,hook能够正常运行。
修改示例,以模拟hook处理时间较长的情况
image

若使用1台MQTTX客户端连接emqx,同时连续发送消息:
在OnMessagePublish中,多次连续调用中thread id保持不变,直到所有消息处理完成才收到(串行),比如快速连续发送3条消息,则MQTTX客户端15秒后会同时收到3条消息。
若使用多台MQTTX客户端连接emqx,同时发送消息:
在OnMessagePublish中,每个客户端消息对应的thread id不同,5秒处理时间后多条消息同时收到(并行)。

我想咨询一下:
exhook中grpc的处理线程是否是和连接的客户端绑定的,每个客户端的消息会绑定固定的线程处理,而不是每次从线程池新获取线程处理?
目前需求,数据中台使用1个client连接emqx流量比较大,希望能够通过exhook并行处理消息(单台client连接消息会串行处理),不知该如何实现?

  1. emqx的每个 exhook 会建立与grpc server的长连接池,size为机器CPU核数。
  2. 根据clientid来做dispatch。同一个clientid只会到同一条grpc 长连接上,以确保消息的顺序。

好的,如果只有一个client是不是grpc server就只试用了一个固定的线程,配置的多线程max_workers实际上是不起作用的,不知道理解对吗?

非常对

谢谢,请教一下在单个client情况下如果想并行处理传输的message,需要在OnMessagePublish中增加并行处理环节,或者有什么更好的方式处理负载呢?

你说的grpc server并行处理消息么,反正你onmessagepublish回得够快就行。