0

私は、Rabbitmq と Bunny gem を使用して、顧客に送信するメッセージを保存しています。メッセージをキューにプッシュする Padrino ベースの Web サービスと、メッセージを消費する多くのワーカーがあります。

Thin をサーバーとして使用すると正常に動作しますが、Apache/Passenger で Web サービスを開始すると、Bunny から「実行期限が切れました」というメッセージが表示されます。Passenger の EventMachine に問題があると読みましたが、Bunny は EventMachine を使用していないため、動作は非常に似ていますが、別の問題である可能性があります。

例外は「実行期限切れ」なので、到着しないメッセージを待っているため、コードは非常に単純ですが、コールバックの問題が発生する可能性があると思います。Bunny は RabbitMQ へのチャネルを開き、メッセージをプッシュしてチャネルを閉じます。そのため、ポーリングは行われず、コールバックも呼び出されません。

サービスのコードは次のとおりです。

client = Bunny.new
client.start
client.create_channel  # => throws exception, "execution expired"
...
4

1 に答える 1

1

問題が見つかりました。クライアントインスタンスをクラスにバインドし、複数のリクエストで同じ接続を使用したかったため、これは Passenger の問題でした。シンでは機能しましたが、パッセンジャーはこのソリューションを気に入りませんでした。

于 2013-09-18T09:04:32.020 に答える