我们有一个由Quartz连接器触发的MuleSoft应用程序。
此外,在应用程序中还有一个以FTP入站端点开头的流程,该端口为FTP服务器上的文件进行ping操作。检测到文件时,会读取它们。一切都很好。
我们需要停止FTP入站端点,以便它不会整天ping。因此,我们希望关闭(即停止)包含FTP传输连接器的流程。
问题?在测试期间,我们的石英作业设置为每隔几分钟运行一次。如果我们不使用FTP阅读器停止流程,则Quartz重复间隔有效。每一点点应用程序开始。完美......有点。
但是......当我们按照我们想要的方式通过Java组件以编程方式停止流程时,那么Quartz重复间隔永远不会重复。它在启动时运行一次,然后在此之后永远停留。
当某个应用程序的某个组件上的Flow停止时,是否有内部会对Quartz时序控件造成污染?
这是使用Quartz作业的Flow。我们想要停止的流程在Main内部。
<flow name="offline-pricing-flow" doc:name="offline-pricing-flow">
<quartz:inbound-endpoint jobName="OLP" repeatInterval="300000" responseTimeout="10000" doc:name="Quartz" cronExpression="0 0/5 * 1/1 * ? *">
<quartz:event-generator-job></quartz:event-generator-job>
</quartz:inbound-endpoint>
<flow-ref name="init-flow" doc:name="Init"></flow-ref>
<flow-ref name="main-flow" doc:name="Main" doc:description="Main processing."></flow-ref>
</flow>
以下是我们停止流程的代码:
FlowConstruct flow = context.getRegistry().lookupFlowConstruct("file-service-flow");
if (flow != null && flow.getMuleContext().isStarted()) {
try {
flow.getMuleContext().stop();
} catch (MuleException e) {
e.printStackTrace();
}
}
在应用程序的早期,我们尝试在组件中以这种方式启动它:
@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
FlowConstruct flow = eventContext.getMuleContext().getRegistry().lookupFlowConstruct("file-service-flow");
if (flow != null && flow.getMuleContext().isStopped()) {
try {
flow.getMuleContext().start();
} catch (MuleException e) {
e.printStackTrace();
}
}
return eventContext.getMessage().getPayload();
}
答案 0 :(得分:0)
我的错误是我自己的。
上面我描述了这个动作,并问为什么我的Quartz作业停止了,但发生的事情是我实际上是在停止MuleContext - 而不是流本身。这是我不正确的尝试。
$table->integer('follower_id')->unsigned();
$table->integer('followee_id')->unsigned();
$table->foreign('follower_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('followee_id')->references('id')->on('users')->onDelete('cascade');
我现在可以看到我是如何猜测的。
这是正确的方法。我终于找到了一个例子,我可以看到我的注册表查找错误。
我需要将查找转换为AbstractFlowConstruct而不是FlowConstruct。之后它完美地运作了。我现在更聪明了。
FlowConstruct flow = context.getRegistry().lookupFlowConstruct("file-service-flow");
if (flow != null && flow.getMuleContext().isStarted()) {
try {
flow.getMuleContext().stop();
} catch (MuleException e) {
e.printStackTrace();
}
}