1

私は eJabberd 用のいくつかの拡張モジュールを作成しましたが、そのほとんどはさまざまな理由で情報の断片を RabbitMQ に渡します。単一のボックスではなく、Rabbit クラスターがあるステージングでサーバーを立ち上げるまで、すべて問題ありませんでした。

クラスタを利用するには、「x-ha-policy」パラメータを「all」または「nodes」のいずれかの値で Rabbit に渡す必要があります。これは、Java および Python のプロデューサーとコンシューマーに対しては問題なく機能しますが、eJabberd (もちろん Erlang AMQP クライアントを使用) には少し困惑しています。x-ha-policy パラメーターは、追加パラメーターの単なる「キャッチオール」である「client_properties」パラメーターに渡す必要があります。

Python with pika では、次のことができます。

client_params = {"x-ha-policy": "all"}
queue.declare(host, vhost, username, password, arguments=client_params)

そしてそれはうまくいきます。ただし、Erlang クライアントのドキュメントには、次のように引数をリストとして渡す必要があると書かれています。

[{binary(), atom(), binary()}]

[{binary(), binary()}] だけの場合、キーと値の関係はわかりますが、アトムが何になるかはわかりません。

明確にするために、私は初心者のErlangプログラマーなので、これは私が慣れていない一般的な構造である可能性があるため、答えは明らかではありません.

4

1 に答える 1

2

私はこれをで見つけました。これはamqp_network_connection.erl、いくつかのデフォルト値を設定するためのラッパーのように見えます。

client_properties(UserProperties) ->
    {ok, Vsn} = application:get_key(amqp_client, vsn),
    Default = [{<<"product">>,   longstr, <<"RabbitMQ">>},
               {<<"version">>,   longstr, list_to_binary(Vsn)},
               {<<"platform">>,  longstr, <<"Erlang">>},
               {<<"copyright">>, longstr,
                <<"Copyright (c) 2007-2012 VMware, Inc.">>},
               {<<"information">>, longstr,
                <<"Licensed under the MPL.  "
                  "See http://www.rabbitmq.com/">>},
               {<<"capabilities">>, table, ?CLIENT_CAPABILITIES}],
    lists:foldl(fun({K, _, _} = Tuple, Acc) ->
                    lists:keystore(K, 1, Acc, Tuple)
                end, Default, UserProperties).

どうやらアトムは値型を記述しているようです。利用できるタイプはわかりませんが、longstrあなたの場合はうまくいく可能性があります。

于 2012-06-17T14:31:37.643 に答える