1

私の Catalyst アプリでは、SOAP with WSDL を使用してリモート サーバーへの非常に重要な接続を行っています。

すべて正常に動作しますが、何らかの理由でリモート サーバーがダウンすると、すべてのアプリがタイムアウトになるまで待機します。すべての。すべてのコントローラーとプロセス、すべてのクライアント!!

SOAP LITE トランスポート エラーのタイムアウトを 15 秒に設定すると、すべてが 15 秒待機します。タイムアウト待機中は、どのユーザーまたは接続からのページも表示できません。

Catalyst アプリには Fast CGI と Ngnix を使用しています。待機中に複数のfcgiプロセスを使用すると、他の人が接続を処理しますが、それらすべてが障害のあるSOAPサービスにアクセスしようとすると...タイムアウトに達するまで、すべて待機して応答を待ちます。それらのすべてが待機している場合、それ以上の接続は許可されません。

SOAP::LITE が「シングルスレッド」であることをどこかで読んだ答えを探しています。

本当ですか?すべての訪問者が1 つのSOAP 接続しか使用できないということですか? 信じがたいです。

これは呼び出しのための私のコードです:

sub check_result {
    my ($self, $code, $IP, $PORT) = @_;

    my $soap = SOAP::Lite->new( proxy => "http://$IP:$PORT/REMOTE_SOAP
+");

    $soap->autotype(0);
    $soap->default_ns('http://REMOTENAMESPACE/namespace/default');
    $soap->transport->timeout(15);

     $soap-> on_fault(sub { my($soap, $res) = @_; 
        eval { die ref $res ? $res->faultstring : $soap->transport->st
+atus };
          return ref $res ? $res : new SOAP::SOM;
       });

     my $som = $soap->call("remote_function",
         SOAP::Data->name( 'Entry1' )->value( $code ),
     );

    return $som->paramsout;
}

perlmonks で親切に提案されたこのわずかに異なるアプローチも試しましたが、何も良くなりませんでした

誰かが私を正しい方向に向けることができますか?

ミグ

4

1 に答える 1