我正在使用eJabberd作为我的XMPP服务器。我正在开发一个模块,用type=queue
过滤消息,然后将它们添加到工作队列Beanstalkd。
问题:每当我收到type =“queue”的消息时,我都会连接到beanstalkd。我认为这是不正确的。
方法:我试图放
{ok, Q} = beanstalk:connect(),
中的start(_Host, _Opt)
,但由于put(Pid, Data) -> put(Pid, Data,[])
需要Pid,我不知道如何传递Pid,从开始到on_filter 。
%% name of module must match file name
-module(mod_beanstalkd).
%% Every ejabberd module implements the gen_mod behavior
%% The gen_mod behavior requires two functions: start/2 and stop/1
-behaviour(gen_mod).
%% public methods for this module
-export([start/2, stop/1, on_filter_packet/1]).
%% included for writing to ejabberd log file
-include("ejabberd.hrl").
-include("jlib.hrl").
start(_Host, _Opt) ->
?INFO_MSG("starting mod_beanstalkd", []),
ejabberd_hooks:add(filter_packet, global, ?MODULE, on_filter_packet, 120).
stop(_Host) ->
?INFO_MSG("stopping mod_beanstalkd", []),
ejabberd_hooks:delete(filter_packet, global, ?MODULE, on_filter_packet, 120).
on_filter_packet({From, To, XML} = Packet) ->
?INFO_MSG("on_beanstalkd ~p~n", [Packet]),
Type = xml:get_tag_attr_s(<<"type">>, XML),
case Type =:= <<"service">> andalso DataTag =:= false of
true ->
?INFO_MSG("on_beanstalkd service = True", []),
{ok, Q} = beanstalk:connect(),
JSON = xml:get_tag_cdata(xml:get_subtag(XML, <<"body">>)),
{inserted, ID} = beanstalk:put(Q, JSON),
Return = Packet,
false ->
Return = Packet,
?INFO_MSG("on_beanstalkd ELSE Return ~p~n", [Return])
end,
Return.