【问题标题】:Why or when should I use messages queues such as RabbitMQ, ZeroMQ in Erlang?为什么或何时应该在 Erlang 中使用 RabbitMQ、ZeroMQ 等消息队列?
【发布时间】:2013-11-20 09:27:57
【问题描述】:
你好,很棒的 Erlang 社区!
我正在制作一个包含客户端和后端的小项目。 (复杂..对吗?):)
我正在用 erlang 制作它。
客户端和后端将是两个独立的进程,我想知道我是否需要(或应该)使用某种消息队列来让它们交互?
我知道我可以让他们使用他们的 PID 进行交互并使用“!”发送消息运算符。
我想我想说的是我正在努力寻找这个问题的答案:
“为什么或何时应该在 Erlang 中使用 RabbitMQ、ZeroMQ 等消息队列”?
【问题讨论】:
标签:
erlang
rabbitmq
message-queue
zeromq
【解决方案1】:
当您需要解耦系统的不同层时,我会选择消息传递组件。此外,消息传递组件允许您对消息/请求进行不同的集成模式,例如基于标头的主题/扇出/路由......
消息传递系统也用于可扩展性目的,因此您可以让同一进程的多个实例同时运行,从同一队列消费。
最后我想说的是,RabbitMQ 是一个消息代理,但 ZeroMQ 不是,它是一个消息传递库。
【解决方案2】:
当您需要本机消息传递工具无法提供的东西时,您希望使用消息传递库。
这些包括:
- 如果您需要保证您的消息在
至少一次,恰好一次等(即交易)
- 如果您的系统负载如此之大,如果您可以
将消息保存在磁盘而不是内存中(持久性)
- 您需要其他花里胡哨的功能,例如安全、与其他设备的互操作
系统、复杂的消息传递模式(路由)等。
【解决方案3】:
如果您可以牺牲可靠性来换取性能,请使用 ZeroMq。
如果您需要可靠性(消息持久性等),并且可以放弃一些性能,请使用 RabbitMq 等代理解决方案。