我为 eJabberd 编写了一些扩展模块,其中大部分出于各种原因将信息片段传递给 RabbitMQ。一切都很好,直到我们将服务器启动到我们有一个 Rabbit 集群而不是一个盒子的地方。
为了利用集群,您需要将“x-ha-policy”参数与“all”或“nodes”值一起传递给 Rabbit。这适用于 Java 和 Python 生产者和消费者,但 eJabberd(当然使用 Erlang AMQP 客户端)让我有点难过。x-ha-policy 参数需要传递到“client_properties”参数中,该参数只是额外参数的“catchall”。
在带有 pika 的 Python 中,我可以这样做:
client_params = {"x-ha-policy": "all"}
queue.declare(host, vhost, username, password, arguments=client_params)
那行得通。然而,Erlang 客户端的文档说参数应该作为列表传递:
[{binary(), atom(), binary()}]
如果它只是 [{binary(), binary()}] 我可以看到与键/值的关系,但不确定原子会在那里。
为了清楚起见,我是一名新手 Erlang 程序员,所以这可能是我不熟悉的常见结构,所以没有答案会太明显。