【问题标题】:What is the java config equivalent to tcp-outbound-gateway?与 tcp-outbound-gateway 等效的 java 配置是什么?
【发布时间】:2015-05-02 00:27:46
【问题描述】:

我有以下 spring-integration XML 配置

<ip:tcp-outbound-gateway id="outboundClient"
        request-channel="requestChannel"
        reply-channel="string2ObjectChannel"
        connection-factory="clientConnectionFactory"
        request-timeout="10000"
        reply-timeout="10000"/>

如何编写与上述等效的 Java 配置? 我认为等价的将是

@Bean
public TcpOutboundGateway outboundClient() {
    TcpOutboundGateway tcpOutboundGateway = new TcpOutboundGateway();
    tcpOutboundGateway.setConnectionFactory(clientConnectionFactory());
    tcpOutboundGateway.setRequiresReply(true);
    tcpOutboundGateway.setReplyChannel(string2ObjectChannel());
    tcpOutboundGateway.setRequestTimeout(10000);
    tcpOutboundGateway.setSendTimeout(10000);
    return tcpOutboundGateway;
}

但我找不到设置请求通道的方法。 任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 您还需要调用方法afterPropertiesSet(),这不会通过ConvertionService 使用任何已注册的转换器。我解决这类问题的方法是查看源代码,因为 Spring 在幕后做了很多魔法。
  • 我确实看过源代码,但是没有办法设置请求通道。一开始我以为OutputChannel是请求通道,但是setReplyChannel实际上是在内部设置outputChannel。

标签: java spring spring-integration spring-java-config


【解决方案1】:

您的配置看起来不错,但您还应该知道,任何 Spring Integration Consumer 组件都包含两个主要对象:MessageHandler(在您的情况下为TcpOutboundGateway)和EventDrivenConsumer for subscriable input-channel 或@ 987654328@ 如果input-channelPollable

所以,既然你已经有了第一个处理部分,你需要另一个消耗。为此,Spring Integration 建议使用端点注释标记您的 @Bean

@Bean
@ServiceActivator(inputChannel = "requestChannel")
public TcpOutboundGateway outboundClient() {

Spring Integration Reference Manual 中查看更多信息。

但是,要允许这样的注释过程(或任何其他 Spring 集成基础架构),您必须将 @Configuration 标记为 @EnableIntegration

还可以考虑使用Spring Integration Java DSL 以从JavaConfig 中获得更多收益。

【讨论】:

  • 感谢您的回答,但在添加@ServiceActivator 后出现另一个错误,它显示 org.springframework.messaging.MessageDeliveryException: Dispatcher has no subscribers for channel 'org.springframework.context.annotation.AnnotationConfigApplicationContext@ 7b306b9f.requestChannel'.;嵌套异常是 org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers
  • 似乎无论我在 @ServiceActivator@Transformer 上作为 inputChannel 放置什么,该 bean 都没有订阅该频道。跨度>
  • 好收获!抱歉:我错过了提及@EnableIntegration。请参阅我对答案的编辑。
  • 感谢@artem-bilan,最后我发现我忘了放@Configuration 注释。我最初使用主 Java 配置中的 @ImportResource 获得了 spring-integration XML 配置,然后我开始创建 spring-integration XML 配置的 java 版本,并从主配置导入。我放了@EnableIntegration@IntegrationComponentScan,但我忘了放@Configuration。有趣的是,这些配置上的 @Bean 是由 spring 上下文创建的。这就是为什么我没有意识到我忘了把@Configuration
  • 我检查应用程序的方法是我有一组与 XML 配置一起工作的集成测试,所以我只是继续运行这些测试,看看 java 配置是否正常工作。
猜你喜欢
  • 1970-01-01
  • 2015-05-03
  • 2018-07-17
  • 2016-10-28
  • 2013-11-14
  • 1970-01-01
  • 2014-01-08
  • 2018-04-02
  • 1970-01-01
相关资源
最近更新 更多