天道酬勤,学无止境

Spring Integration - 如何调试“调度程序没有订阅者”?(Spring Integration - How to debug 'Dispatcher has no Subscribers'?)

问题

我正在使用 Spring Boot 1.4.0.RELEASE、Spring Integration 4.3.1.RELEASE、Spring Integration DSL 1.2.0.M1。

我正在尝试做的事情:

我正在编写一个应用程序,它将从 FTP 和本地文件系统(使用入站通道适配器)读取文件,将文件传输到本地工作目录(使用文件出站网关),处理,然后将它们移动到最终目的地(文件出站网关/适配器)。

我遇到了“调度程序没有频道订阅者”错误的问题。 我相信这可能意味着上下文中的某些内容被破坏并且集成组件没有启动。 上下文本身说它在我调试时处于活动状态。

我的实际配置相当大,所以我不是在找人为我找到解决方案。 我正在寻找有关在哪里查看以及如何找出抱怨的组件的一些指导。

实际错误如下。

DEBUG [integration.channel.ExecutorChannel] [task-scheduler-1] preSend on channel 'errorChannel', message: ErrorMessage [payload=org.springframework.messaging.MessageDeliveryException: Dispatcher has no subscribers for channel 'application:test.fileReadingFlow.channel#1'.

fileReadingFlowInboundChannelAdapter其从目录中读取文件(基本上,我问在这里。没有什么复杂在它。该适配器将消息发送到一个.log()处理程序,丰富了头,将其发送到处理程序( Files.outboundgateway ),最后是MessageChannel

我试过的:

  • 我已经遍历了MessageChannel的链,并将所有东西排成一行(没有拼写错误,所有Bean存在)。
  • 我已经增加了更多的LoggingHandler在S fileReadingFlow ,以标识错误讯息。
  • 我已经删除了fileReadingFlow部分内容,以查看是否可以将消息传递得更远。
  • 我删除了一些Component以查看是否可以找到问题。
  • 我为org.springframework.integration添加了调试日志记录,并且没有出现类似错误或警告的内容。

我发现流第一次尝试做除日志记录(甚至是丰富头)以外的其他事情时,发生了 Dispatcher 错误,并且消息最终出现在errorChannel 。 当我将fileReadingFlow更改为仅读取文件、记录消息并以空处理程序终止时,出现 Dispatcher 错误。 因此,我相当确定问题不在于fileReadingFlow本身。

除了一个一个地删除每个Component ,有没有办法追踪导致错误的原因?

编辑:

来源:

@Bean(name = "fileReadingFlow")
@Scope("prototype")
@Profile("test")
public IntegrationFlow testFileReadingFlow(MyEntity entity) {

    return IntegrationFlows.from(s -> s.file(new File("someFolder")))
            .filter(fileListFilterBuilder.buildFileListFilter(File.class))
            , endpointConfigurer -> endpointConfigurer.poller(poller)
    )
            .log(DEBUG, "com.myco.testFileReadingFlow")
            .enrichHeaders(h ->
                    h.header("entity", entity)
                            .header(FOLDER_NAME, entity.getFolder())
            )
            .log(DEBUG, "com.myco.testFileReadingFlow", message -> "after headers")
            .handle(Files.outboundGateway("workingFolder").deleteSourceFiles(true).autoCreateDirectory(true))
                .log(DEBUG, "com.myco.testFileReadingFLow", message -> "sending message to aggregatingFileChannel " + message)
                .channel("aggregatingFileChannel")
                .get();
    }
@Bean
public MessageChannel aggregatingFileChannel() {
    return MessageChannels.executor(Executors.newCachedThreadPool()).get();

}

@Bean
public IntegrationFlow aggregatingFlow() {

    // Read from the aggregatingFileChannel
    return from("aggregatingFileChannel")
            <...>
            .get();
}

应用:

@SpringBootApplication
@EnableConfigurationProperties
@EntityScan(
        basePackages = { "com.myco.model" }
)
@EnableJpaRepositories(basePackages = {"com.myco.rest"})
public class Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = new SpringApplicationBuilder(Application.class).web(false).run(args);

        MyEntitySvc entitySvc = context.getBean(MyEntitySvc.class);

        List<MyEntity> entities = entitySvc.findAllActive();

        AutowireCapableBeanFactory beanFactory = context.getBeanFactory();

        entities.forEach(entity -> {
            IntegrationFlow flow = (IntegrationFlow) context.getBean("fileReadingFlow", entity);

            beanFactory.getBean(entity.getFolder() + MyConstants.ADAPTER, Lifecycle.class).start();
    }

解决方案:

根据我下面的评论, @Prototype方法在某些时候确实有效,但我破坏了它并且无法轻松回滚更改。 根据 Gary 和 Artem 的建议,我尝试改为使用IntegrationFlowContext方法。 为了保留运行时启动、配置文件驱动注入等我最初的@Configuration ,我将我的IntegrationFlow的定义从@Configuration类移到了@Service类。 这样我就可以将IntegrationFlowContext注入到Service ,并为我的不同配置文件实现不同版本的Service ,而无需我的Application知道Profile 。 主要方法从从Context提取Bean并手动启动它到检索Service和调用方法。

@Service
@Profile("test")
public class TestFlowSvc implements FlowSvc {
    public IntegrationFlow testFileReadingFlow(Vendor vendor) {
        return // As previous Flow
    }

    public void startFileReadingFlow(MyEntity entity) {

        IntegrationFlow flow = testFileReadingFlow(entity);

        integrationFlowContext.register(flow, true);
    }
}

应用:

@SpringBootApplication
@EnableConfigurationProperties
@EntityScan(
        basePackages = { "com.myco.model" }
)
@EnableJpaRepositories(basePackages = {"com.myco.rest"})
public class Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = new SpringApplicationBuilder(Application.class).web(false).run(args);

        MyEntitySvc entitySvc = context.getBean(MyEntitySvc.class);
        FlowSvc flowSvc = context.getBean(FlowSvc.class);
        List<MyEntity> entities = entitySvc.findAllActive();

        entities.forEach(entity -> {
            flowSvc.startFileReadingFlow(entity);
    }
回答1

我们Dispatcher has no Subscribers错误时,有一些SubscribableChannel不活跃SubscriberMessageHandler在Spring集成的期限)。 “活动”意味着根本没有定义或处于停止状态。

因此,对于application:test.fileReadingFlow.channel#1 MessageChannel ,我会application:test.fileReadingFlow.channel#1查看该fileReadingFlow IntegrationFlow并找到第二个匿名DirectChannel

我无法找出调试此类问题的简单方法,因为有MessageChannel ,但没有什么可跟踪的,因为Dispatcher has no Subscribers

所以,请展示fileReadingFlow IntegrationFlow定义,让我们一起解决问题!

看着你的相关问题,它应该是这个:

.handle(Files.outboundGateway())

这可能只是处于停止状态。

但我们不能确定,直到实际代码。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何调试spring-integration(How to debug spring-integration)
    问题 我们对 spring-integration 非常满意,除非事情没有按预期工作。 然后真的很难找出发生了什么(我们使用的是xml配置)。 有人可以将我指向 spring 集成组件背后的 java 组件以便调试它们。 例如:如果我有一个 headerValueRouter,我可以在哪里设置断点以找出消息中标头的实际值,就在组件进行路由之前。 也许甚至有一个列表 int:component->java 类? 回答1 真的。 该列表存在,但并不像您期望的那样直接。 每个 xml 组件都转到某个解析器。 最后一个配置 Spring Integration 组件。 您可以从任何AbstractIntegrationNamespaceHandler实现的源代码中找到映射。 实际上,我们尝试用 Java 类名来反映 xml-tag 名称。 所以<header-value-router> -> HeaderValueRouterParser -> HeaderValueRouter 。
  • 使用 Spring Integration 通过 TCP 连接“只写”('Write-Only' over a TCP connection with Spring Integration)
    问题 我使用int-ip:tcp-connection-factory和int-ip:tcp-outbound-gateway与外部服务器通信。 服务器提供的大多数服务的协议遵循标准的请求 - 响应风格......效果很好。 但是,在某些情况下,我只需要发送请求而无需响应。 我的问题是,如何配置我的通道和连接,以便我可以指定是否等待响应? 目前我找不到方法,即使我不期待响应,Spring 也总是在发送请求后阻塞。 编辑:按照建议,我使用了tcp-outbound-channel-adapter 。 我的配置文件只有以下内容: <int:channel id="requestChannel" /> <int-ip:tcp-outbound-channel-adapter channel="requestChannel" connection-factory="client" /> <int-ip:tcp-connection-factory id="client" type="client" host="smtp.gmail.com" port="587" single-use="false" so-timeout="10000" /> 这是我的主课: public final class Main { private static final Logger LOGGER =
  • 如何使用 spring 集成 sftp 出站网关从远程服务器下载文件?(How to download files from remote server using spring integration sftp outbound gateway?)
    问题 我有 spring 批处理设置(远程分区),它从文件中读取项目并处理它们。 如果输入文件不存在,我想从远程服务器复制它们。 所以我添加了一个步骤侦听器,因为我正在尝试使用 spring 集成 sftp 出站网关从远程服务器下载文件。 public class PrepareExchangeListListener implements StepExecutionListener { private String localDir; private String remoteDir; private DirectChannel requestChannel; private PollableChannel replyChannel; public String getLocalDir() { return localDir; } public void setLocalDir(String localDir) { this.localDir = localDir; } public String getRemoteDir() { return remoteDir; } public void setRemoteDir(String remoteDir) { this.remoteDir = remoteDir; } public DirectChannel
  • Spring Integration Chain Flow - 处理空网关调用(Spring Integration Chain Flow - Handling Void Gateway Calls)
    问题 我有一个 spring 集成流,它有一个对网关服务的服务激活器调用,该服务的结果为空并且似乎挂起。 它不会继续链的其余部分。 我是否需要指定其他内容来说明我不希望从网关调用返回结果以继续线程执行? 我有一个 void 方法声明。 服务 package foo; import org.springframework.messaging.handler.annotation.Header; import org.springframework.messaging.handler.annotation.Payload; public interface myService { void capitalString(String inputString ) ; } Spring 集成流程 <import resource="classpath:META-INF/spring/integration/spring-integration-database-context.xml"/> <context:property-placeholder location="classpath:META-INF/spring/integration/testApp.properties"/> <!-- INTEGRATION FLOW - START --> <int-file:inbound
  • Spring Integration Http Outbound Gateway Header Mapper(Spring Integration Http Outbound Gateway Header Mapper)
    问题 我正在尝试将自定义标头添加到我的 http 出站网关。 我尝试过和工作的事情: <int:header-enricher> <int:header name="replyChannel" value="nullChannel" /> <int:header name="Content-Type" value="application/xml" /> <int:header name="X-Operation" value="CUSTOM_OPERATION" /> <int:header name="X-StatusCode" value="200" /> </int:header-enricher> <int-http:outbound-gateway url="${custom.url}/update" mapped-request-headers="HTTP_REQUEST_HEADERS, Operation, StatusCode" http-method="POST" request-factory="serviceRequestFactory" expected-response-type="java.lang.String" error-handler="errorChannelHandler" /> 在上面的场景中,它可以工作,但我添加的自定义标头默认以 X
  • spring 集成超时客户端(spring integration time out clients)
    问题 我的 spring 集成方案是: 使用自定义协议(大小和内容)发送数据的数十个生产者我必须解码这个自定义协议,然后处理结果。 所以我尝试了很多配置,目前最好的配置如下: <bean id="serializer" class="com.MySerializerDeserializer" /> <task:executor id="myTaskExecutor" pool-size="5-300" queue-capacity="500000"/> <int-ip:tcp-connection-factory id="serverTcpConFact" type="server" port="5566" using-nio="true" single-use="false" so-timeout="5000" task-executor="myTaskExecutor" deserializer="serializer" serializer="serializer"/> <int-ip:tcp-inbound-channel-adapter id="tcpInboundAdapter" channel="tcpInbound" connection-factory="serverTcpConFact" /> <int:channel id="tcpInbound" />
  • Spring Integration-如何使用http outbound-gateway发送POST参数(Spring Integration - how to send POST parameters with http outbound-gateway)
    问题 我正在尝试使用Spring Integration和http outbound-gateway组合一个非常简单的HTTP POST示例。 我需要能够发送带有一些POST参数的HTTP POST消息,就像使用curl : $ curl -d 'fName=Fred&sName=Bloggs' http://localhost 如果我将简单的String作为接口方法的参数发送给我,那么它可以工作(没有POST参数),但是我需要发送一个pojo,其中pojo的每个属性都将成为POST参数。 我有以下SI配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:int="http://www.springframework.org/schema/integration" xmlns:int-http="http://www.springframework.org/schema/integration/http" xsi:schemaLocation="http://www.springframework.org
  • 如何在 Spring 框架中实现 UDP [关闭](How to implement UDP in Spring framework [closed])
    问题 关闭。 这个问题需要更加集中。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑这篇文章来关注一个问题。 5年前关闭。 改进这个问题 我已经用 spring 框架实现了一个 web 应用程序。 现在我需要一个 udp 服务器来接收来自客户端(android 设备)的传入消息。 如何将此功能添加到基于 spring 的项目中? 谢谢。 回答1 如果您想使用 Spring Integration 的 TCP 和 UDP 支持,假设您只收到一条 UDP 消息并对该消息执行某些操作,您应该按照以下步骤操作: 创建消息消费者 package com.example.udp; import org.springframework.messaging.Message; public class UDPConsumer { @Autowire what you want, this will be a Spring Bean @ServiceActivator public void consume(Message message) { ... do something with message ... } } 可选:创建一个具有某些属性的 udp-server.properties udp-server.threads=10 udp-server.port=4000 udp
  • 使用 SpringApplicationConfiguration 的 Spring Boot 集成测试似乎无法解决 @Value 注释(Spring boot integration test with SpringApplicationConfiguration doesn't seem to resolve @Value annotation)
    问题 我有一个集成测试设置,如: @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = {XmlFileSplitter.class, ...}) public class XmlFileSplitterTests { .. 在XmlFileSplitter我有一个用@Value("${default.output.file}")注释的属性,它的值是从application.properties检索的。 这在正常运行应用程序时工作正常。 但是,在运行集成测试时,该值未解析(它是“ ${default.output.file} ”)。 当我调试用于解析占位符的代码时,我注意到org.springframework.beans.factory.support.AbstractBeanFactory embeddedValueResolvers在测试中为空,而在正常运行应用程序时包含一个PropertySourcesPlaceholderConfigurer 。 我看到正常运行有来自 spring-boot-autoconfigure 的PropertyPlaceholderAutoConfiguration来配置 propertyplaceholder
  • Spring Integration Java DSL - 如何调用 int-http:outbound-gateway?(Spring Integration Java DSL - How to invoke int-http:outbound-gateway?)
    问题 我在流程中有一个部分,其中进行了 ReST API 调用: <int:channel id="requestChannel"/> <int-http:outbound-gateway request-channel="requestChannel" reply-channel="logger" url="${api.base.uri}/data" http-method="PUT" expected-response-type="java.lang.String"/> <int:logging-channel-adapter id="logger" logger-name="logger" expression="payload" level="INFO"/> 我正在尝试使用 Java DSL 复制它,但找不到足够的文档。 任何帮助将非常感激。 回答1 是的,Spring Integration Java DSL 还没有为 HTTP 提供命名空间工厂。 无论如何,我们可以继续使用它的通用组件来做到这一点: @Bean public MessageHandler logger() { LoggingHandler loggingHandler = new LoggingHandler("INFO"); loggingHandler.setLoggerName("logger")
  • 如何根据环境变量打开/关闭 Spring Integration 通道?(How to open/close Spring Integration channel based on environmental variable?)
    问题 我有一个通道,用作链中的输入通道。 仅当环境变量 sd 不正确时才需要使用它。 是否可以将此条件写入 spring-integration 文件而不创建额外的 Java 过滤器? 所以,我想这个链条不工作的时候-dsd =在任何其他情况下的启动脚本和工作如此。 <int:channel id="sdCreationChannel"> <int:queue/> </int:channel> <int:chain input-channel="sdCreationChannel" output-channel="debugLogger"> <int:poller fixed-delay="500" /> <int:filter ref="sdIntegrationExistingRequestSentFilter" method="filter"/> <int:transformer ref="sdCreationTransformer" method="transformOrder"/> <int:service-activator ref="sdCreationServiceImpl" method="processMessage"> <int:request-handler-advice-chain> <ref bean="retryAdvice"/> </int
  • Spring Integration - 如何保留原始有效负载并在以后使用它?(Spring Integration - how to keep the orginal payload and use it later?)
    问题 我想保留原始请求的原始有效负载并将其放在 xslt-transformer 或其他操作中。 我丢失了它,因为我使用了 xslt-transformer 并且我只需要转换中的一些元素。 所以我的场景是: 1.inbound-gateway(传入 WS 请求)-> 2.xslt-transformer(用于调用外部 WS 的映射)-> 3.outbound-gateway(调用外部 WS)-> 4.xslt-transformer(从分别是外部 WS 和原始请求) 在第 4 步,我没有原始请求,但我需要它,因为我必须将其中的值放入响应中。 我该如何实施? 谢谢,V。 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:int="http://www.springframework.org/schema/integration" xmlns:int-ws="http://www.springframework.org/schema/integration/ws" xmlns:int-xml="http://www.springframework.org/schema/integration/xml"
  • 将 Spring Boot 和 Spring Integration 与数据库支持的配置结合使用(Using Spring Boot & Spring Integration with database backed Configuration)
    问题 对于 spring boot + 集成应用程序,我试图从数据库加载配置,允许它通过@Value注释被 Spring 的Environment访问和可注入,并且可以被外部化配置覆盖,如 spring boot 参考文档下所述外化配置部分。 我遇到的问题是我的 spring 集成 XML 包含无法解析的${input}属性占位符,因为在Spring 尝试加载 XML 配置之前我无法加载数据库支持的配置。 应用程序的入口点: @SpringBootApplication public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } } 如何加载数据库配置: @Configuration public class DbPropertiesConfig { @Autowired private org.springframework.core.env.Environment env; @PostConstruct public void initializeDatabasePropertySourceUsage() { MutablePropertySources propertySources =
  • 如何在 Tomcat 中部署 Spring Integration 应用程序?(How to deploy a Spring Integration app in Tomcat?)
    问题 我已经完成了“10 分钟内的 Spring 集成”教程,用于设置基本的 Spring 集成应用程序。 我想在 Tomcat 中部署这个应用程序,并在服务器上运行输入通道并将输出发送回客户端,但我很难找到任何这样的例子。 任何人都可以向我提供一些指向如何执行此操作的教程的链接或任何其他类型的指导吗? 非常感谢所有帮助! 回答1 这是我从 Spring Integration 论坛得到的回复: 你好 首先 - 尝试构建简单的 Spring MVC 应用程序(没有 Spring-Int!) - 这将让您知道如何将 Java Web 应用程序(特别是 web.xml 文件)与 Spring Framework(spring 上下文 XML)集成。 然后尝试将 Spring Integration bean(通道、过滤器等)添加到 Spring 配置中。 最简单的场景是这样的: 在 web.xml 中配置 DispatcherServlet 构建简单的 Spring MVC 控制器将 Spring Integration beans 添加到 DispatcherServlet 的 XML 配置中将通道注入控制器并使用它 这是关于如何发送消息以响应客户端的 HTTP 请求的粗略教程。 然后您可以尝试使用 Spring-Integration Web 服务支持
  • Spring + JAXB 集成:类有两个同名属性(Spring + JAXB integration : Class has two properties of the same name)
    问题 我在生成 WSDL时遇到问题。 我想创建生成json string 的SOAP Web 服务。 下面的 pojo 类从另一个 Web 项目引用到我的 Web 服务项目中。 我在使用WebServiceContext创建的servlet 响应对象上编写了生成的 json 字符串,并使用 @Resource 注释进行了注释。 我还尝试调试Web 服务方法(用@WebParam 注释的参数化),pojo 但项目未在调试模式下启动。 在调用 web 方法之前,它会为所有字段抛出异常: Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 15 counts of IllegalAnnotationExceptions Class has two properties of the same name "result" this problem is related to the following location: at public portal.common.ejb.LoginResult portal.common.ejb.LoginResponse.getResult() at portal.common.ejb.LoginResponse this problem is related to
  • 轮询目录时如何防止重复的 Spring Integration 服务激活(How to prevent duplicate Spring Integration service activations when polling directory)
    问题 我有一个 Spring Integration 目录轮询器: <task:executor id="filePollingExecutor" pool-size="1" /> <int:channel id="inboundFilesChannel" datatype="java.io.File" /> <int-file:inbound-channel-adapter id="inboundFilesAdapter" channel="inboundFilesChannel" directory="/my/files/queue" prevent-duplicates="true"> <int:poller id="poller" fixed-delay="1000" max-messages-per-poll="1" task-executor="filePollingExecutor" /> </int-file:inbound-channel-adapter> 为了响应目录中出现的文件,我有一个服务激活器,它调用服务上的一个方法: 不幸的是,我发现该服务在文件到达时始终被调用两次。 最初我认为这是由于有多个执行程序线程,但您可能在上面注意到,我试图通过将轮询器绑定到池大小为 1 的 taskExecutor 来解决这个问题。
  • 如何使用 int-ftp spring 集成向通道发送消息?(how to dispatch message to channels with int-ftp spring integration?)
    问题 谢谢关注, 我在 ftp 服务器上使用int-ftp:outbound-gateway到 ls 命令,我想处理输出通道并分派到其他通道,我的代码是: <int:channel id="inbound1"/> <int-ftp:outbound-gateway id="gatewayLS" session-factory="ftpSessionFactory" request-channel="inbound1" command="ls" command-options="-R" expression="payload" reply-channel="output"/> <int:channel id="output"> <int:interceptors> <int:wire-tap channel="logger"/> </int:interceptors> </int:channel> 如何处理输出通道并分派到其他通道,例如 input1 和 input2?
  • spring-integration:如何将 post 请求参数传递给 http-outbound(spring-integration: how to pass post request parameters to http-outbound)
    问题 我需要将 post 请求参数传递给 int-http:outbound-gateway,但找不到任何简单的方法来做到这一点。 我必须做的是向沙发数据库发出 http 请求,如沙发数据库文档中所述,通过单个请求获取多个文档: curl -d '{"keys":["bar","baz"]}' -X POST http://127.0.0.1:5984/foo/_all_docs?include_docs=true 那么如何将名为“keys”的参数传递给 int-http:outbound-gateway? (我在消息的有效负载中拥有我需要的所有数据) <int-http:outbound-gateway request-channel="requestChannel" url="http://127.0.0.1:5984/foo/_all_docs?include_docs=true" http-method="POST" expected-response-type="java.lang.String"/> 回答1 入站消息的有效载荷成为 POST 的正文; 选定的标头被映射,您可以使用许多标头映射选项来控制它; 请参阅文档。 如果你需要将一些java对象转换为上面的JSON,你可以在网关上游添加一个转换器,或者在网关本身中配置一个自定义的MessageConverter 。
  • Spring集成-队列/轮询似乎耗尽线程池而无需任何操作(Spring integration - Queue/Poller seems to exhaust threadpool without any action)
    问题 我有一个Spring集成应用程序,附加到AMQP经纪人。 我想从amqp队列接收消息,并更新数据库记录。 为了提高性能,我拥有一组工作人员,允许同时进行多个更新。 我有以下配置: <int-amqp:inbound-channel-adapter queue-names="pricehub.fixtures.priceUpdates.queue" channel="pricehub.fixtures.priceUpdates.channel" message-converter="jsonMessageConverter"/> <int:channel id="pricehub.fixtures.priceUpdates.channel"> <int:queue /> </int:channel> <int:service-activator ref="updatePriceAction" method="updatePrices" input-channel="pricehub.instruments.priceUpdates.channel"> <int:poller fixed-delay="50" time-unit="MILLISECONDS" task-executor="taskExecutor" /> </int:service-activator>
  • Spring Integration - 出站传输重命名问题(Spring Integration - outbound transfer renaming issues)
    问题 我在这里使用示例程序来构建我的代码。 在本地 SFTP 测试服务器上一切正常,当我今天在我的客户端 SFTP 服务器上测试时,它给了我一个例外,如下所示。 当我调试时,我看到在客户端的 SFTP 服务器上使用“.writing”扩展名写入文件。 内容很好,我没有看到传输的文件有任何问题,但现在文件名是问题。 阅读spring docs后,我看到这是临时文件扩展名,程序尝试将其重命名回原始名称,但由于客户端SFTP不提供此选项,因此抛出异常。 我尝试将temporary-file-suffix=".writing"为temporary-file-suffix=""认为这将关闭选项,唉同样的问题。 有解决办法吗? 其中一篇文章提到了这一点,但没有解决方案或问题对用户来说消失了。 > 2014-07-28 20:11:21,564 [main] INFO com.jcraft.jsch - SSH_MSG_NEWKEYS > sent 2014-07-28 20:11:21,608 [main] INFO com.jcraft.jsch - > SSH_MSG_NEWKEYS received 2014-07-28 20:11:21,678 [main] INFO > com.jcraft.jsch - SSH_MSG_SERVICE_REQUEST sent 2014-07-28