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