- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何通过注释而不是常规配置文件来配置入站 channel 适配器?我能够为 session 工厂定义 bean,如下所示:
@Bean
public DefaultFtpSessionFactory ftpSessionFactory() {
DefaultFtpSessionFactory ftpSessionFactory = new
DefaultFtpSessionFactory();
ftpSessionFactory.setHost(host);
ftpSessionFactory.setPort(port);
ftpSessionFactory.setUsername(username);
ftpSessionFactory.setPassword(password);
return ftpSessionFactory;
}
如何配置通过注释给出的入站 channel 适配器?
<int-ftp:inbound-channel-adapter id="ftpInbound"
channel="ftpChannel"
session-factory="ftpSessionFactory"
filename-pattern="*.xml"
auto-create-local-directory="true"
delete-remote-files="false"
remote-directory="/"
local-directory="ftp-inbound"
local-filter="acceptOnceFilter">
<int:poller fixed-delay="60000" max-messages-per-poll="-1">
<int:transactional synchronization-factory="syncFactory" />
</int:poller>
</int-ftp:inbound-channel-adapter>
@Artem Bilan修改后的代码如下
@EnableIntegration
@Configuration
public class FtpConfiguration {
@Value("${ftp.host}")
private String host;
@Value("${ftp.port}")
private Integer port;
@Value("${ftp.username}")
private String username;
@Value("${ftp.password}")
private String password;
@Value("${ftp.fixed.delay}")
private Integer fixedDelay;
@Value("${ftp.local.directory}")
private String localDirectory;
private final static Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@Bean
public SessionFactory<FTPFile> ftpSessionFactory() {
DefaultFtpSessionFactory sessionFactory = new DefaultFtpSessionFactory();
sessionFactory.setHost(host);
sessionFactory.setPort(port);
sessionFactory.setUsername(username);
sessionFactory.setPassword(password);
return new CachingSessionFactory<FTPFile>(sessionFactory);
}
@Bean
public FtpInboundFileSynchronizer ftpInboundFileSynchronizer() {
FtpInboundFileSynchronizer fileSynchronizer = new FtpInboundFileSynchronizer(ftpSessionFactory());
fileSynchronizer.setDeleteRemoteFiles(false);
fileSynchronizer.setRemoteDirectory("/");
fileSynchronizer.setFilter(new FtpSimplePatternFileListFilter("*.xml"));
return fileSynchronizer;
}
@Bean
@InboundChannelAdapter(value = "ftpChannel",
poller = @Poller(fixedDelay = "60000", maxMessagesPerPoll = "-1"))
public MessageSource<File> ftpMessageSource() {
FtpInboundFileSynchronizingMessageSource source =
new FtpInboundFileSynchronizingMessageSource(ftpInboundFileSynchronizer());
source.setLocalDirectory(new File(localDirectory));
source.setAutoCreateLocalDirectory(true);
source.setLocalFilter(new AcceptOnceFileListFilter<File>());
return source;
}
在运行这个时,我得到一个异常如下 没有定义名为“ftpChannel”的 bean
请注意,在连接入站 channel 适配器时,“ channel ”关键字不可用,取而代之的是它的“值”。
我尝试用 PollableChannel 连接 channel ,但也没有成功。如下所示:
@Bean
public MessageChannel ftpChannel() {
return new PollableChannel() {
@Override
public Message<?> receive() {
return this.receive();
}
@Override
public Message<?> receive(long l) {
return null;
}
@Override
public boolean send(Message<?> message) {
return false;
}
@Override
public boolean send(Message<?> message, long l) {
return false;
}
};
}
我收到错误消息“未能在超时内发送消息:-1”。我是否还做错了什么?
我正在寻找的是在应用程序启动时连接所有 beans,然后公开一些方法来开始轮询服务器,处理它们然后从本地删除它们,就像这样
public void startPollingTheServer() {
getPollableChannel().receive();
}
其中 getPollableChannel() 为我提供了为轮询连接的 bean。
最佳答案
有一个@InboundChannelAdapter
适合您。
@Bean
public FtpInboundFileSynchronizer ftpInboundFileSynchronizer() {
FtpInboundFileSynchronizer fileSynchronizer = new FtpInboundFileSynchronizer(ftpSessionFactory());
fileSynchronizer.setDeleteRemoteFiles(false);
fileSynchronizer.setRemoteDirectory("/");
fileSynchronizer.setFilter(new FtpSimplePatternFileListFilter("*.xml"));
return fileSynchronizer;
}
@Bean
@InboundChannelAdapter(channel = "ftpChannel")
public MessageSource<File> ftpMessageSource() {
FtpInboundFileSynchronizingMessageSource source =
new FtpInboundFileSynchronizingMessageSource(ftpInboundFileSynchronizer());
source.setLocalDirectory(new File("ftp-inbound"));
source.setAutoCreateLocalDirectory(true);
source.setLocalFilter(new AcceptOnceFileListFilter<File>());
return source;
}
另外看看 Reference Manual .
另请注意,对于Java DSL for Spring Integration ,其中可能看起来像:
@Bean
public IntegrationFlow ftpInboundFlow() {
return IntegrationFlows
.from(s -> s.ftp(this.ftpSessionFactory)
.preserveTimestamp(true)
.remoteDirectory("ftpSource")
.regexFilter(".*\\.txt$")
.localFilename(f -> f.toUpperCase() + ".a")
.localDirectory(this.ftpServer.getTargetLocalDirectory()),
e -> e.id("ftpInboundAdapter").autoStartup(false))
.channel(MessageChannels.queue("ftpInboundResultChannel"))
.get();
}
关于java - Spring 集成 : Inbound Channel Adapter configuration via annotations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38380851/
我一直在试图找出一种计算以下内容的方法: 带宽、延迟、当前上传和下载速度 . 并且对我为 INBOUND-RTP、OUTBOUND-RTP 和 REMOTE-INBOUND-RTP 获得的值感到困惑。
我相信我可能不太了解 Twilio 调用的流程。我有两种情况 - 一种情况是我从浏览器调用电话(传出),第二种情况是我从手机调用电话到浏览器(客户端)(传入)。 对于这两个调用,当请求到达我的 Twi
Creative World Quartz Scheduler.
目前我有一个简单的 war ,其中包含一些 Spring 集成配置,并且使用以下代码将该 war 部署到 jetty 容器中: protected void createWac(File file,
我有一个带有 spring 集成的以下设置。 我在网关上收到 2 种不同类型的 POST 请求,它们都被传递到 service-activator 进行处理。在一种类型的 POST 请求中,我
我正在使用 Spring Integration 将 xml 文件从 SFTP 传输到本地。我使用了Spring社区提供的代码。 主类文件 public class SFTPMain { publ
我有一个从标准数据库查询开始的集成,它会更新数据库中的状态以表明集成工作正常。有用。 但是如果无法处理数据并引发异常,则状态不会按预期更新,但我想用“KO”状态更新我的数据库行,这样同一行就不会一遍又
我正在编写一个 C++ 应用程序来管理嵌入式设备的蓝牙连接。我在 Linux 下通过 D-Bus 与 BlueZ5 对话。 作为实现入站配对的第一步,我执行了以下操作: 通过AgentManager1
我们有以下基于 int-jpa 的简单工作流: [入站 channel 适配器] -> [服务激活器] 配置是这样的:
使用 GRPC 传输大量数据的最佳实践是什么?我正在向 GRPC 服务器发送请求,该服务器将流回数据。发回的数据可以是大约 100 个 protobuf 消息,也可以是几个 100.000 个 pro
下面是我的 Spring Integration 配置的一部分: 如您所见,我想定义 2 个不同的过滤器: 在 recursiveScanner 中跳过临时文
我尝试使用多个 jpa:inbound-channel-adapter。但是我有一个问题。当我添加两个入站 channel 适配器时,只有最后一个起作用。例如,有两个入站 channel ,我们现在将
我遇到这个问题,第一次处理此代码时,它运行良好,但第二次(第一次和第二次运行基于设置的 cron),它在失败文件夹中查找文件,然后删除成功文件夹并将其复制到失败文件夹中。我不知道为什么会发生这种情况?
我正在使用 URL fetch service 将请求从一个模块发送到同一应用中的另一个模块,它表示如果将 follow_redirects 参数设置为 False,则 X-Appengine-Inb
我正在用 MySQL 编写一个简单的 JDBC 代码。一切正常,我可以通过 select 语句打印表中的记录。但是当我使用 Connection.close() 关闭连接时,出现以下异常。感谢您的帮助
我目前正在使用 Spring Integration 4.1.0 和 Spring 4.1.2。我需要能够逐行读取文件并将读取的每一行用作消息。基本上我想允许“重播”我们的消息源之一,但消息不会保存在
Spring 集成 tcp 网关可以设置如下: 注意设置为 10 秒的回复超时。 是不是意味着TCP服务器会调用服务,最多可以等待10秒?如果服务在 10 秒内没有回复,TCP 服务器
我是 Spring Integration 的新手,我正在尝试设置一个简单的用例: 轮询远程 REST 端点,将返回的有效负载拆分为多行并将其发送到 Kafka 出站适配器。我成功地做了一些类似的事情
我实现了一个 sftp-inbound-channel-adapter,当处理异常时,我应该显示一条自定义消息。 我试过 : 但是一个元素 不被接受。你能解释另一种解决方
Tensorflow 版本:1.11.0 我正在尝试将 TensorBoard 与 Tensorflow keras 模型一起用于投影仪可视化。 我收到 AttributeError: Layer f
我是一名优秀的程序员,十分优秀!