【发布时间】:2020-02-12 01:45:07
【问题描述】:
我想通过发送消息(rabbitmq)来简化应用程序。运行程序时,我想编写消息并接收它(在同一个控制台中)。那么我该如何编写一个“订阅”方法,它将一直运行(在启动程序之后)并等待接收消息?同时当然我应该能够写一条消息
【问题讨论】:
-
我也很好奇。
我想通过发送消息(rabbitmq)来简化应用程序。运行程序时,我想编写消息并接收它(在同一个控制台中)。那么我该如何编写一个“订阅”方法,它将一直运行(在启动程序之后)并等待接收消息?同时当然我应该能够写一条消息
【问题讨论】:
创建一个受监督的应用程序(混合新的 my_app --sup )。 您实现了两个 GenServer,一个用于接收 (MyApp.Reader),另一个用于发送 (MyApp.Writer)。您将 GenServer 添加为主管规范中的工作人员。
我猜您的 RabbitMQ 适配器(从未将它与 elixir 一起使用,因此您必须仔细检查)也将受到监督。命名它,并将其名称传递给 GenServer init 方法(例如,通过您在声明工作人员时传递的参数)
您也可以直接在 MyApp 中为编写器实现 API。比如:
def send(message) do
GenServer.cast(:name_of_writer, $message)
end
然后你就可以这样做了:MyApp.send("some message")
您的接收器工作人员将接收所有消息,并使用检查或记录器模块将它们打印到 CLi
看看the GenServer docs,有一些代码示例可以帮助你。
【讨论】: