0

apache brooklyn Web インターフェイスで、システム マネージャー向けのコンテンツを表示したいと考えています。コンテンツが長すぎて、単純なセンサー値として提供できません。

私たちのアイデアは、タスクを作成し、コンテンツをタスクの出力ストリームに書き込み、次のように REST ベースの URL をマネージャーに提供することでした: /v1/activities/{task}/stream/stdout (もちろん、リンクはマスクされています)素敵なテキスト付き)

ストリームとタスクは次のように作成されます。

LOG.info("{} Creating Activity for ClusterReport Feed", this);
activity = Tasks.builder().
    displayName("clusterReportFeed").
    description("Output for the Cluster Report Feed").
    body(new Runnable() {
        @Override
        public void run() {
            //DO NOTHING
        }
    }).
    parallel(true).
    build();

LOG.info("{} Task Created with Id: " + activity.getId(), this);
Entities.submit(server, activity).getUnchecked();

タスクが作成されたようで、相互作用は完全に正常に機能します。ただし、準備された URL を使用してブラウザーからタスク出力ストリームにアクセスしたい場合、タスクが存在しないというエラーが表示されます。

私たちの考えは、私たちが正しい管理/実行コンテキストにいないということです。Web ページは、エンティティとそのセンサーとは別のコンテキストで実行されています。Web コンソールのコンテキストでも表示されるように、タスクを配置するにはどうすればよいでしょうか。

コンテンツをファイルに書き込んで、Jetty (ブルックリン Web サーバー) 経由でダウンロードできるようにすることはできますか? それははるかに簡単な方法です。

4

1 に答える 1

0

Brooklyn の多くのタスクはデフォルトで一時的です。つまり、完了後すぐに削除されます (エフェクターの呼び出しなどは、デフォルトでは一時的ではありません)。

タスク ビルダーを使用する際に、以下のコードを使用して、タスクを非一時的としてマークできます。

.tag(BrooklynTaskTags.NON_TRANSIENT_TASK_TAG)

ただし、(Brooklyn バージョン 0.9.0 以降) タスクはソフト参照を使用してメモリ内に保持されることに注意してください。これは、タスクの stdout が将来のある時点で失われる可能性が高いことを意味します。

あなたのユースケースでは、おそらくこれをエフェクターの結果として持つことは理にかなっていますか?

または、代わりに S3 などのオブジェクト ストアに書き込むことはできますか? S3 アプローチは、私には最適と思われます。

ファイルへの書き込みについては、Brooklyn の高可用性で使用する場合は注意が必要です。共有ボリュームに書き込みますか?

ファイルに書き込む場合は、Web 拡張機能を提供して、人々がそのファイルの内容にアクセスできるようにする必要があります。Brooklyn 0.9.0 の時点で、BrooklynLauncher ( BrooklynWebServer を呼び出す)を呼び出すときに、独自の WAR をコードに追加できます。

于 2016-06-06T11:08:00.277 に答える