消息陷阱句柄*回调Elixir

时间:2014-07-17 04:25:03

标签: elixir gen-server

我创建了一个引用Elixir练习曲的小型genserver应用程序 并且工作正常,当我启动服务器并且做GenServer.call..i时获得所需的数据。

与此同时,我的应用程序也正在接收来自其他生产者的消息,这些消息必须被捕获,因为现在只要我的应用程序收到如下所示的消息,它就会在shell上显示。

iex(6)> subscription 0x7fdc83c0cdf0 ref 0x7fdc8403fc00
encode_message num 2
encode_message address topic://tryme
next/type PN_STRING
encode_message body alloc size 8192
encode_message formatted body "message body..."
write message sz: 130
Msg {message,#Ref<0.0.0.753>,
          #{address => "topic://tryme",
            body => "Enter some text here for the message body..."}}
AMQP Message received {message,#Ref<0.0.0.753>,
                            #{address => "topic://tryme",
                              body => "message body..."}}

如何在我的app回调函数中获取此消息以进一步发送到数据库。到目前为止,我可以知道我会在handle_info中收到此消息,因为消息未使用GenServer.call调用。但不确定如何。

1 个答案:

答案 0 :(得分:4)

如果您的GenServer正在接收来自其他进程的消息,那么您应该能够在handle_info / 2中简单地匹配它们。尝试这样的事情:

def handle_info(msg, state) do
  IO.inspect {:handle_info, msg}
  {:noreply, state}
end

但是,如果在添加此行后没有打印任何内容,则表示您没有收到您期望的消息。