Apache 将任务发布到Web控制台执行(管理)上下文

Apache 将任务发布到Web控制台执行(管理)上下文,apache,executioncontext,brooklyn,Apache,Executioncontext,Brooklyn,在apache brooklyn web界面中,我们希望为sytsem管理器显示一些内容。内容太长,无法用作简单的传感器值 我们的想法是创建一个任务并将内容写入任务的输出流,然后向管理者提供基于REST的URL,如下所示: /v1/activities/{task}/stream/stdout(当然,链接被一些漂亮的文本屏蔽了) 流和任务的创建方式如下: LOG.info("{} Creating Activity for ClusterReport Feed", this); activity

在apache brooklyn web界面中,我们希望为sytsem管理器显示一些内容。内容太长,无法用作简单的传感器值

我们的想法是创建一个任务并将内容写入任务的输出流,然后向管理者提供基于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控制台上下文中也可见


是否可以将内容写入文件,然后通过Jetty(brooklyns web服务器)提供下载?这将是一种更简单的方法。

布鲁克林的许多任务默认为瞬态任务,即它们在完成后不久被删除(例如效应器调用默认为非瞬态)

在使用任务生成器时,可以使用以下代码将任务标记为非瞬态:

.tag(BrooklynTaskTags.NON_TRANSIENT_TASK_TAG)
但是,请注意(从Brooklyn版本0.9.0开始)任务是使用保存在内存中的。这意味着任务的stdout可能会在将来的某个时候丢失,此时其他内存中的对象需要该内存

对于您的用例,将其作为效应器结果是否有意义

或者您可以改为写入对象存储,比如S3?对我来说,S3方法似乎是最好的

要将其写入文件,与Brooklyn high availability一起使用时必须小心。您是否要写入共享卷

如果确实要写入文件,则需要提供web扩展名,以便人们可以访问该文件的内容。从Brooklyn 0.9.0开始,您可以在调用(哪个调用)时在代码中添加自己的WAR