环境:centos 7
emqx版本:4.1.0
在使用emqx-exhook 做Java扩展时,(如何做java扩展请参考使用 Java 开发 EMQ X MQTT 服务器插件 - 简书)加载插件时遇到以下错误:
2022-03-03 16:43:01.377 [error] [ExHook Driver] CALL java 'SendKafka':init([]), unknown return: {'EXIT',{timeout,[{erlport,call,3,[{file,"/home/xzh/emqx-rel/_build/emqx/lib/erlport/src/erlport.erl"},{line,234}]},{emqx_extension_hook_driver,do_call,5,[{file,"/home/xzh/emqx-rel/_build/emqx/lib/emqx_extension_hook/src/emqx_extension_hook_driver.erl"},{line,292}]},{emqx_extension_hook_driver,do_init,2,[{file,"/home/xzh/emqx-rel/_build/emqx/lib/emqx_extension_hook/src/emqx_extension_hook_driver.erl"},{line,113}]},{emqx_extension_hook,enable,2,[{file,"/home/xzh/emqx-rel/_build/emqx/lib/emqx_extension_hook/src/emqx_extension_hook.erl"},{line,49}]},{emqx_extension_hook_app,load_all_drivers,1,[{file,"/home/xzh/emqx-rel/_build/emqx/lib/emqx_extension_hook/src/emqx_extension_hook_app.erl"},{line,66}]},{emqx_extension_hook_app,start,2,[{file,"/home/xzh/emqx-rel/_build/emqx/lib/emqx_extension_hook/src/emqx_extension_hook_app.erl"},{line,38}]},{application_master,start_it_old,4,[{file,"application_master.erl"},{line,277}]}]}}
2022-03-03 16:43:01.378 [error] [ExHook] Load driver java failed: unknown_return_format
2022-03-03 16:43:01.379 [error] crasher:
initial call: application_master:init/4
pid: <0.1626.0>
registered_name: []
exception exit: {bad_return,
{{emqx_extension_hook_app,start,[normal,[]]},
{'EXIT',
{{badmatch,{error,unknown_return_format}},
[{emqx_extension_hook_app,load_all_drivers,1,
[{file,
"/home/xzh/emqx-rel/_build/emqx/lib/emqx_extension_hook/src/emqx_extension_hook_app.erl"},
{line,66}]},
{emqx_extension_hook_app,start,2,
[{file,
"/home/xzh/emqx-rel/_build/emqx/lib/emqx_extension_hook/src/emqx_extension_hook_app.erl"},
{line,38}]},
{application_master,start_it_old,4,
[{file,"application_master.erl"},{line,277}]}]}}}}
in function application_master:init/4 (application_master.erl, line 138)
ancestors: [<0.1625.0>]
message_queue_len: 1
messages: [{'EXIT',<0.1627.0>,normal}]
links: [<0.1625.0>,<0.1266.0>]
dictionary: []
trap_exit: true
status: running
heap_size: 987
stack_size: 27
reductions: 252
neighbours:
直接写错误原因:
那是由于官网的emqx_extension_hook插件没有开通on_message_publish、on_message_delivered、on_message_acked这几个钩子的功能,导致初始化时候返回错误。
解决方法:
1、由于我需要以上的钩子,用看发kafka,所以更改emqx_extension_hook源码,增加以上钩子功能。
2、重新编译打包emqx-4.1.0版本,将依赖emqx_extension_hook改成修改后的代码,我将修改后的代码放在zhhxiong/emqx-exhook 了,
3、编译完成之后,就可以实现emqx接收到消息后就发送kafka了,实现emqx桥接kafka功能。
PS:不会编译emqx的也可以联系我(微信号:imerlgo),到时写篇编译的文章;