我创建了一个引用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调用。但不确定如何。
答案 0 :(得分:4)
如果您的GenServer正在接收来自其他进程的消息,那么您应该能够在handle_info / 2中简单地匹配它们。尝试这样的事情:
def handle_info(msg, state) do
IO.inspect {:handle_info, msg}
{:noreply, state}
end
但是,如果在添加此行后没有打印任何内容,则表示您没有收到您期望的消息。