我们有一个应用程序,每秒处理大量请求。此应用需要通过HTTPS对我们的一台服务器进行GET调用来通知外部服务。
此处的目标是使用HTTPoison发出异步GET请求。我不太在乎请求的响应,我关心的只是知道请求是否失败,因此我可以将任何可能的错误写入记录器。
如果成功,我什么也不想做。
我检查了HTTPoison的官方文档,发现它们支持异步请求:
https://hexdocs.pm/httpoison/readme.html#usage
但是,这种方法有两个问题:
flush
表示请求已完成。我无法登录到应用程序,无法手动flush
来查看请求的进行情况,这太疯狂了。 所以,我有一个简单的问题:
我认为默认的HTTPoison.get
是同步的,如文档所示。
答案 0 :(得分:2)
这可以通过按请求生成一个新进程来实现。考虑类似的东西:
notify = fn response ->
# Any handling logic - write do DB? Send a message to another process?
# Here, I'll just print the result
IO.inspect(response)
end
spawn(fn ->
resp = HTTPoison.get("http://google.com")
notify.(resp)
end) # spawn will not block, so it will attempt to execute next spawn straig away
spawn(fn ->
resp = HTTPoison.get("http://yahoo.com")
notify.(resp)
end) # This will be executed immediately after previoius `spawn`
请查看我在这里指出的spawn/1
的文档。
希望有帮助!