顺序中的自定义中介仅在WSO2启动时运行

顺序中的自定义中介仅在WSO2启动时运行,wso2,wso2esb,Wso2,Wso2esb,我制作了一个只打印“Hello World”的自定义中介,我的自定义中介如下所示: public class HelloWorld extends AbstractMediator implements ManagedLifecycle{ public static void helloWorld() { System.out.println("Hello World"); } public void init(SynapseEnvironment synapseEnvironm

我制作了一个只打印“Hello World”的自定义中介,我的自定义中介如下所示:

public class HelloWorld extends AbstractMediator implements ManagedLifecycle{

public static void helloWorld() {
    System.out.println("Hello World");  
}

public void init(SynapseEnvironment synapseEnvironment) {
    // initializing  surcharges map with some symbols
    helloWorld();
}

public void destroy() {
    // clearing the surcharges contents

}

@Override
public boolean mediate(MessageContext arg0) {
    // TODO Auto-generated method stub
    return false;
}
<proxy xmlns="http://ws.apache.org/ns/synapse" name="FileProxy" transports="vfs" startOnLoad="true" trace="disable">
<target>
    <inSequence>
        <log level="full"/>
            <target sequence="Hello"/>
    </inSequence>
</target>
<parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
<parameter name="transport.PollInterval">15</parameter>
<parameter name="transport.vfs.MoveAfterProcess">file:///Users/Source</parameter>
<parameter name="transport.vfs.FileURI">file:///Users/Target/</parameter>
<parameter name="transport.vfs.FileNamePattern">.*.txt</parameter>
<parameter name="transport.vfs.ContentType">text/plain</parameter>
}

我按“Hello”的顺序调用这个类:


我在代理中使用这个序列,如下所示:

public class HelloWorld extends AbstractMediator implements ManagedLifecycle{

public static void helloWorld() {
    System.out.println("Hello World");  
}

public void init(SynapseEnvironment synapseEnvironment) {
    // initializing  surcharges map with some symbols
    helloWorld();
}

public void destroy() {
    // clearing the surcharges contents

}

@Override
public boolean mediate(MessageContext arg0) {
    // TODO Auto-generated method stub
    return false;
}
<proxy xmlns="http://ws.apache.org/ns/synapse" name="FileProxy" transports="vfs" startOnLoad="true" trace="disable">
<target>
    <inSequence>
        <log level="full"/>
            <target sequence="Hello"/>
    </inSequence>
</target>
<parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
<parameter name="transport.PollInterval">15</parameter>
<parameter name="transport.vfs.MoveAfterProcess">file:///Users/Source</parameter>
<parameter name="transport.vfs.FileURI">file:///Users/Target/</parameter>
<parameter name="transport.vfs.FileNamePattern">.*.txt</parameter>
<parameter name="transport.vfs.ContentType">text/plain</parameter>

移动
15
file:///Users/Source
file:///Users/Target/
*.txt
文本/纯文本
我希望每次将文件(*.txt)放入源文件夹时,都会调用我的序列。但问题是序列只被调用一次(当wso2 esb启动时)。如何在每次将文件放入源文件夹时调用序列


谢谢,

我认为它正按预期工作,但我认为您误解了自定义中介程序的工作原理。您看到的消息是init方法显示的消息,这是创建中介器时显示的消息

每次您将文件留在文件夹中时,该中介器都会运行,但发生这种情况时启动的方法是“中介器”方法,该方法的实现不会执行任何操作(retrun false)。所以您应该实现中介方法,如下所示

public boolean mediate(MessageContext arg0) {
    hellowWorld();
    return false;
}
它会像你期望的那样显示信息


希望它能起作用

您应该在mediate方法()中调用您的逻辑。并使返回值为true。如果将其设为false,中介引擎将在中介过程中返回false,并在消息流中发出问题。 你可以查一下