1

次の lib バージョンを使用して、最初の Akka/Camel アプリケーションを「スクラッチ」(読み取り、「noob」) からまとめようとしています。

  • akka-camel: 2.2.0-RC1

私が見つけることができるすべてのドキュメント (Akka ドキュメント、ユーザー グループなど) によると、ファイルベースのキューから消費するために必要なことは、システムを次のようにセットアップすることだけです。

メインクラス:

actorSystem = ActorSystem.create("my-system");

Props props = new Props(Supervisor.class);
ActorRef supervisor = actorSystem.actorOf(props, "supervisor");

Camel camel = CamelExtension.get(actorSystem);
CamelContext camelContext = camel.context();
camelContext.start();

スーパーバイザー クラス:

import akka.actor.ActorRef;
import akka.actor.Props;
import akka.camel.javaapi.UntypedConsumerActor;
import org.apache.camel.Message;

/**
 * Manages creation and supervision of UploadBatchWorkers.
 */
public class Supervisor extends UntypedConsumerActor {    
    @Override
    public String getEndpointUri() {
        return "file:///Users/myhome/queue";
    }

    @Override
    public void preStart() {
        String test = "test";
    }

    @Override
    public void onReceive(Object message) {
        if (message instanceof CamelMessage) {
            // do something
        }
    }

私の問題は、スーパバイザ オブジェクトが作成され、 preStart() メソッドの「テスト」行でのデバッグ中に壊れていることを知っていても (言うまでもなく、正常に処理されるものを明示的に「伝える」場合)、消費しないことです。同じエンドポイントにメッセージを生成する別のアプリケーションがある場合でも、定義されたエンドポイントから。

私が間違っていることは何か分かりますか?

4

2 に答える 2

2

問題は私自身のせいであり、UntypedConsumerActor が継承する Consumer トレイトを見れば、コード例ではっきりとわかります。

この方法:

@Override
public void preStart() {
    String test = "test";
}

親の preStart() メソッドをオーバーライドしますよね?その親メソッドは、実際にはオンザフライで作成されたエンドポイントにコンシューマーを登録するメソッドであるため、オーバーライドすることはできますが、super() を呼び出さなければ機能しません。

これが将来の誰かに役立つことを願っています!

于 2013-07-02T21:23:02.530 に答える