0

私はCamelを初めて使用し、それに慣れるために非常に単純なアプリをセットアップしようとしています.次のコードを実行しています:

CamelContext cc = (CamelContext)ac.getBean("testCamelContext");
ProducerTemplate template = cc.createProducerTemplate();
System.out.println("Sending Message Body");
template.sendBody("seda:testProducer", "hello");
System.out.println("Sent");

これは正常に実行されますが、コンシューマーがメッセージを受信しないようです。コンソールで次のように表示されます。

[                          main] SpringCamelContext             INFO  Apache Camel 2.10.2 (CamelContext: testCamelContext) is starting
[                          main] ManagementStrategyFactory      INFO  JMX enabled.
[                          main] DefaultTypeConverter           INFO  Loaded 172 type converters
[                          main] SpringCamelContext             INFO  Route: route1 started and consuming from: Endpoint[seda://testProducer]
[                          main] ultManagementLifecycleStrategy INFO  StatisticsLevel at All so enabling load performance statistics
[                          main] SpringCamelContext             INFO  Total 1 routes, of which 1 is started.
[                          main] SpringCamelContext             INFO  Apache Camel 2.10.2 (CamelContext: testCamelContext) started in 0.373 seconds
Init Context
SendingMessage
Sending Message Body
Sent

次のキャメル コンテキストを使用します。

<camel:camelContext id="testCamelContext">
    <camel:routeBuilder ref="testCamelRouteBuilder"/>
</camel:camelContext>

そして RouteBuilder ルール:

from("seda:testProducer").beanRef("testConsumer","consumeMessage");

そして、次のコンシューマ Bean:

public class TestConsumer {
    public void consumeMessage(String msg)
    {
        System.out.println("Message: " + msg);
    }
}

すべての豆は問題なく、キャメルはルールを正常に検出しているように見えるので、何が間違っていたのかわかりません。私は明らかに何かを正しく使用していませんか?

4

1 に答える 1

1

実現した間違い; sedaは非同期であるため、コンシューマースレッドがメッセージを受信する前にメインスレッドが終了していました。thread.sleep()を追加し、完全に機能していました。

于 2012-11-23T12:23:51.057 に答える