1

SEDA キューを持つ camel ルートに接続できません。サーバー側では、次の構成があります。

<camel:route>
            <camel:from uri="seda:input"/>
            <camel:log  message =">>>>>data is : ${body}"/>
            <camel:inOnly uri="activemq:queue:TESTQUEUE"/>
        </camel:route>

次のようなスタンドアロン クライアントからこのルートをヒットしようとしています。

public static void main(String[] args) {

        CamelContext context = new DefaultCamelContext();
        producer = context.createProducerTemplate();
            producer.sendBody("seda:input","Hey");

}

しかし、私のプロデューサーは seda キューに接続できません。ルートのキューにヒットできません。Bean プロパティに camelContext を追加できません。「Bean クラスのプロパティ 'camelContext' が無効です」というメッセージが表示されます。本文を SEDA キューに送信している場合、メッセージはそこに送信されますが、ルーティングの次の要素には送信されません

4

2 に答える 2

5

Petter が示唆したように、クライアントは SEDA ルートが定義されているのと同じ Camel コンテキストに接続する必要があります。あなたの例では、新しい DefaultCamelContext() を作成し、定義されているルートにメッセージを送信しようとしているようです。別の文脈で。

通常、Spring XML でキャメル コンテキストを定義し、それを必要とするクラスにコンテキストを注入します...

<camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring">
    <routeBuilder ref="myRouter"/>
</camelContext>

<bean id="myClient" class="com.mycompany.MyClient">
    <property name="camelContext" ref="camelContext"/>
</bean>

次に、クライアントコードは次のように呼び出すだけです...

getCamelContext().createProducerTemplate().sendBody("seda:input","Hey");

とはいえ、クライアント コードが同じ JVM にない場合、または同じ CamelContext へのハンドルを取得できない場合は、JMS、REST、HTTP (またはリモート クライアント インターフェイスをサポートするキャメル コンポーネント) を使用するオプションがあります... SEDA エンドポイントの代わりまたはその周辺。

たとえば、次のように HTTP エンドポイント ( camel-jetty経由) で SEDA キューへのアクセスをラップできます...

from("jetty:http://localhost:9001/input").to("seda:input");
于 2012-05-07T03:21:57.000 に答える
1

camel の SEDA コンポーネントは、非同期内部チャネルとしてインデントされています。これは、メッセージ処理を複数のスレッドに分離し、より柔軟な実装が必要な場合に非常に役立ちます。

あなたの例では、activemq エンドポイントがあります。概念的には、SEDA コンポーネントとほとんど同じですが、より多くの機能があります。Camel と通信するクライアントには、activemq または別のプロトコルを使用することをお勧めします。

とはいえ、クライアントが Camel と同じ Java アプリケーションで実行され、クライアントが Camel コンテキストを取得できる場合 (これは一般的に推奨しない設計です)、ProducerTemplates を使用して SEDA コンポーネントにメッセージを送信できます。VM コンポーネントを見てください。これは SEDA とほぼ同じですが、同じ Camel コンテキストではなく同じ VM で使用できます。ProducerTemplate の仕組み。

于 2012-05-05T20:58:39.600 に答える