1

1 つのプロジェクトで複数の HTTP コネクタに問題があります。私がやろうとしていることは不可能かもしれませんが、それを達成できるトリックがあるかどうか疑問に思っています.

動作する開始点として、3 つのフローを持つ 1 つのコネクタがあります。1 つはルート URL を処理し、もう 2 つは相対 URL を処理します。これは、各アドレスが期待するペイロードを返すという点で機能します...たとえば、/flow3 相対パスにアクセスすると、「Flow3」が返されます。

<http:connector name="Connector1">
</http:connector>

<flow name="Flow1">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" 
        port="8081" connector-ref="Connector1"/>
    <set-payload value="Flow1"/>
</flow>

<flow name="Flow2">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" 
        port="8081" connector-ref="Connector1" path="flow2"/>
    <set-payload value="Flow2"/>
</flow>

<flow name="Flow3">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" 
        port="8081" connector-ref="Connector1" path="flow3"/>
    <set-payload value="Flow3"/>
</flow>

しかし、いくつかのエンドポイントをある方法で構成し、いくつかのエンドポイントを別の方法で構成したいとします...おそらく別のスレッドモデル...コネクタを使用します。次のような別のコネクタを追加して、3 番目のフローがそれを参照するようにしようとしました。

<http:connector name="Connector1">
</http:connector>

<http:connector name="Connector2">
    <!-- Eventually some different configuration here -->
</http:connector>

<flow name="Flow1">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" 
        port="8081" connector-ref="Connector1"/>
    <set-payload value="Flow1"/>
</flow>

<flow name="Flow2">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" 
        port="8081" connector-ref="Connector1" path="flow2"/>
    <set-payload value="Flow2"/>
</flow>

<flow name="Flow3">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" 
        port="8081" connector-ref="Connector2" path="flow3"/>
    <set-payload value="Flow3"/>
</flow>

これを行うと、Flow1 と Flow2 は引き続き機能しますが、/flow3 にアクセスすると Flow1 が "Flow1" を返します。これは、Connector1 でルート レベルの URL を処理するフローが、このアドレスを処理できることを示しているためだと思います。

Flow1 を削除して、どうなるか試してみました。Flow2 は引き続き機能しますが、Flow3 は次のように報告します。

No receiver found with secondary lookup on connector: Connector1 with URI key: http://localhost:8081/flow3

(これが問題を引き起こしているファビコンのリクエストなのだろうかと思っていますが、よくわかりません。)

このようなことをしています...つまり、同じプロジェクトに2つのコネクタがありますが、そのうちの1つを相対URLに明示的に使用しています...可能ですか?

4

2 に答える 2

3

問題は、各エンドポイントが独自のメッセージ レシーバーを作成することです。一般に、これは問題ではありませんが、TCP ベースのトランスポートに関しては、ポートをめぐって競合します。

ログを見ると、スタートアップ スプラッシュ画面の前に次のエラーが表示されます。

Root Exception stack trace:
java.net.BindException: Address already in use
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
at java.net.ServerSocket.bind(ServerSocket.java:376)
+ 3 more (set debug level logging or '-Dmule.verbose.exception

これは、Flow3 の受信エンドポイントがポート 8081 をバインドできないことを意味します。これは、ソケットがすでにそのポートを所有しており、そのソケットが Connector1 に属しているためです。

于 2013-07-10T00:15:55.430 に答える