1

我正在尝试使用 javascript 功能运行一个 siddhi 应用程序,但是当我将应用程序发送给经理以便将其部署到分布式工作人员中时,它永远不会部署。

我尝试在查询中删除对 j​​avascript 函数的引用,它会部署,但在部署的应用程序中没有 javascript 代码。

这是 siddhi 应用程序:

@App:name("TestApp01")

define function sum[JavaScript] return double {
    return data[0] + data[1];
};

define stream SourceStream (id string, value1 double, value2 double);

@sink(type='log', prefix='received information...')
define stream SinkStream (id string, value1 double);

@info(name='Tags')
@dist(parallel='1')
from SourceStream
select id, sum(value1, value2) as value1
insert into SinkStream;

我在管理器中遇到的错误是:

WARN {org.wso2.carbon.sp.jobmanager.core.deployment.DeploymentManagerImpl} - Couldn't deploy partial Siddhi app TestApp01-1875a7b7-5c20-4f68-80b5-479296c7cd0f-1 in ResourceNode { id: wso2sp-worker-2, host: wso2sp-worker-2, port: 9443 }. Will retry in 2000 milliseconds.
WARN {org.wso2.carbon.sp.jobmanager.core.deployment.DeploymentManagerImpl} - Couldn't deploy partial Siddhi app TestApp01-1875a7b7-5c20-4f68-80b5-479296c7cd0f-1 in ResourceNode { id: wso2sp-worker-1, host: wso2sp-worker-1, port: 9443 }. Will retry in 2000 milliseconds.

我在工人中遇到的错误是:

ERROR {org.wso2.carbon.stream.processor.core.internal.StreamProcessorService} - Exception occurred when validating Siddhi App TestApp01-1875a7b7-5c20-4f68-80b5-479296c7cd0f-1 org.wso2.siddhi.core.exception.SiddhiAppCreationException: Error on 'TestApp01-1875a7b7-5c20-4f68-80b5-479296c7cd0f-1' @ Line: 8. Position: 30, near 'sum(value1, value2)'.

如果我删除 javascript 调用,它会部署,但不会从生成的应用程序中删除 javascript 代码。这是在没有 javascript 函数的 worker 中部署的代码:

@App:name('TestApp01-2055a886-06ea-407d-9d42-e549a6cf47b3-1') 
@source(type='kafka', topic.list='TestApp01.SourceStream', group.id='TestApp01-2055a886-06ea-407d-9d42-e549a6cf47b3-0', threading.option='single.thread', bootstrap.servers='kafka:9092', @map(type='xml'))define stream SourceStream (id string, value1 double, value2 double);
@sink(type='log', prefix='received information...')
define stream SinkStream (id string, value1 double);
@info(name='Tags')

from SourceStream
select id, (value1 + value2) as value1
insert into SinkStream;

我希望使用 javascript 函数部署 siddhi 应用程序,但它并没有与那部分代码一起部署。

4

1 回答 1

0

不幸的是,当前的分布式部署不支持功能定义。这就是您收到此部署错误的原因。作为一种解决方法,而不是 javascript 函数,您可以在 siddhi 函数中构建您已经完成的求和。下面是一个例子

@App:name("TestApp01")

define stream SourceStream (id string, value1 double, value2 double);

@sink(type='log', prefix='received information...')
define stream SinkStream (id string, value1 double);

@info(name='Tags')
@dist(parallel='1')
from SourceStream
select id, value1 + value2 as value1
insert into SinkStream;
于 2019-07-24T11:26:27.427 回答