我想创建一个新的骆驼组件MyComponent,它是不同组件的组合:
例如,代替指定多个端点:
from("file:c:/in")...to...
from("ftp:...")...to...
Run Code Online (Sandbox Code Playgroud)
我希望MyComponent可以检测到正确的端点:
from("myComponent:..")...to...
Run Code Online (Sandbox Code Playgroud)
因此,它可以作为一个适配器,该文件是否来到from("file"),from("sftp"),from("stream"),等...
并作为适配器吞噬者,我们有一个作为条目或ftp的文件..
如何做到这一点?
您是否真的需要骆驼组件,或者可以使用自定义路线生成器来实现?这只是显示一般想法的原始示例:
自定义路线生成器类,而不是组件:
import org.apache.camel.Endpoint;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.file.FileEndpoint;
import org.apache.camel.component.file.remote.FtpConfiguration;
import org.apache.camel.component.file.remote.FtpEndpoint;
class MyFileReader extends RouteBuilder {
private String name;
private String dir;
private String mask;
private String ftpHost;
private int ftpPort;
private String ftpUser;
private String ftpPass;
private boolean ftpMode;
public MyFileReader(String name, String dir, String mask) {
this.name = name;
this.dir = dir;
this.mask = mask;
this.ftpMode = false;
}
public MyFileReader(String name, String dir, String mask, String ftpHost, int ftpPort, String ftpUser, String ftpPass) {
this.name = name;
this.dir = dir;
this.mask = mask;
this.ftpHost = ftpHost;
this.ftpPort = ftpPort;
this.ftpUser = ftpUser;
this.ftpPass = ftpPass;
this.ftpMode = true;
}
@Override
public void configure() throws Exception {
from(initFromEndpoint()).to("direct:" +name + "_out");
}
private Endpoint initFromEndpoint() {
if (ftpMode) {
FtpEndpoint endpoint = new FtpEndpoint();
FtpConfiguration configuration = endpoint.getConfiguration();
configuration.setHost(ftpHost);
configuration.setPort(ftpPort);
configuration.setUsername(ftpUser);
configuration.setPassword(ftpPass);
configuration.setDirectory(dir);
endpoint.setInclude(mask);
return endpoint;
} else {
FileEndpoint endpoint = new FileEndpoint();
endpoint.getConfiguration().setDirectory(dir);
endpoint.setInclude(mask);
return endpoint;
}
}
}
Run Code Online (Sandbox Code Playgroud)
来自Spring xml的用法示例:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<bean id="fileReader" class="MyFileReader">
<constructor-arg name="name" value="myFileReader" />
<constructor-arg name="dir" value="/myfiles" />
<constructor-arg name="mask" value="*.txt" />
</bean>
<bean id="ftpReader" class="MyFileReader">
<constructor-arg name="name" value="myFtpReader" />
<constructor-arg name="dir" value="/myftpfiles" />
<constructor-arg name="mask" value="*.txt" />
<constructor-arg name="ftpHost" value="127.0.0.1" />
<constructor-arg name="ftpPort" value="1234" />
<constructor-arg name="ftpUser" value="myuser" />
<constructor-arg name="ftpPass" value="mypass" />
</bean>
<camelContext xmlns="http://camel.apache.org/schema/spring" id="integration-schedule" useMDCLogging="true">
<routeBuilder ref="fileReader" />
<routeBuilder ref="ftpReader" />
<route id="fileRoute">
<from uri="direct:fileReader_out" />
<log message="Do something with files" />
</route>
<route id="ftpRoute">
<from uri="direct:ftpReader_out" />
<log message="Do something with ftp files" />
</route>
</camelContext>
</beans>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
240 次 |
| 最近记录: |