gpt4 book ai didi

amazon-web-services - ejabberd 与 Riak 的集成

转载 作者:可可西里 更新时间:2023-11-01 11:20:42 27 4
gpt4 key购买 nike

我正在构建一个聊天应用程序,利用 ejabberd 作为服务器,Riak 作为后端 NoSQL 数据库(在 AWS 上)。我可以让单节点 ejabberd 和 Riak 集群分别正常工作,但不知何故无法通过 ejabberd 将聊天数据推送到数据库。

首先,我想在 Riak 中存储离线消息。我写了一个简单的 ejabberd 模块 (mod_offline_riak) 附加到 offline_message_hook。这在发送离线消息时成功调用,但在建立 riak 连接时(在 riakc_pb_socket:start_link 中),我在 ejabberd 日志中收到 undef 错误。下面粘贴了相关的代码片段。

此外,ejabberd 默认安装(来自代码 v15.04)不包含 riak-erlang-client 依赖项,因此我什至将其包含在 ejabberd rebar.config.script 中并重新制作/重新安装但没有帮助。

start(_Host, _Opt) ->
?INFO_MSG("Starting module mod_offline_riak ...", []),
ejabberd_hooks:add(offline_message_hook, _Host, ?MODULE, save_message, 0),
ok.

save_message(From, To, Packet) ->
?INFO_MSG("Entered function save_message ...", []),
create_riak_object(To, Packet),

create_riak_object(To, Packet) ->
?INFO_MSG("Entered function create_riak_object ...", []),
{ok, Pid} = riakc_pb_socket:start_link("***IP of one of the Riak nodes***", 8087),
PollToBeSaved = riakc_obj:new(?DATA_BUCKET, To, Packet),
riakc_pb_socket:put(Pid, PollToBeSaved),
ok.

ejabberd 日志中的错误是:

2015-12-28 16:06:02.166 [error] <0.503.0>@ejabberd_hooks:run1:335 {undef,

[{riakc_pb_socket,start_link,["***Riak IP configured in the module***",8087],
[]},{mod_offline_riak,create_riak_object,2,[{file,"mod_offline_riak.erl"},
{line,39}]},{mod_offline_riak,save_message,3,[{file,"mod_offline_riak.erl"},
{line,23}]},{ejabberd_hooks,safe_apply,3,[{file,"src/ejabberd_hooks.erl"},
{line,385}]},{ejabberd_hooks,run1,3,[{file,"src/ejabberd_hooks.erl"},{line,332}]},
{ejabberd_sm,route,3,[{file,"src/ejabberd_sm.erl"},{line,115}]},
{ejabberd_local,route,3,[{file,"src/ejabberd_local.erl"},{line,112}]},
{ejabberd_router,route,3,[{file,"src/ejabberd_router.erl"},{line,74}]}]}

恐怕过去几天我一直在努力解决这个问题,并且仍在学习我在 Erlang/Riak 周围的步骤,所以感谢这里的任何帮助。

稍微有点题外话,我计划也允许在聊天消息中嵌入媒体附件 - 我认为建议是使用 Riak CS 而不是 Riak - 我将在后台利用 S3。

最后,是否有任何好的 ejabberd/Riak/Redis 集成 Material 可供我引用,人们都知道?我知道最近在伦敦有一个演讲,但我在纽约,所以错过了......:-(

再次感谢您的帮助...

最佳答案

undef 表示模块/函数不可用。据推测,您没有构建 riakc_pb_socket 模块,或者 beam 文件不在您的 Erlang 路径中​​。

关于amazon-web-services - ejabberd 与 Riak 的集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34497159/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com