【问题标题】:Dynamic provider for a Marshalling web service outbound gateway编组 Web 服务出站网关的动态提供程序
【发布时间】:2015-01-21 11:15:26
【问题描述】:

是否可以为 Marshalling Web 服务出站网关设置动态提供程序?

我的意思是,如果我尝试例如:http://100.0.0.1 但它不起作用,我想尝试http://100.0.0.2

我目前的配置:

MarshallingWebServiceOutboundGateway gw = new MarshallingWebServiceOutboundGateway(provider, jaxb2Marshaller(), jaxb2Marshaller());

【问题讨论】:

    标签: spring web-services marshalling spring-integration


    【解决方案1】:

    是的,这是真的。由于MarshallingWebServiceOutboundGateway 允许注入DestinationProvider,您可以随意提供任何自定义实现。

    对于您的 fault-tolerant 用例,您应该执行以下操作:new URLConnection(url).connect() 在您的 DestinationProvider 实现中测试与目标服务器的连接。

    更新

    但是如果我有 https 凭据、证书或任何类型的安全性,我该如何测试新的 URLConnection(url).connect()

    嗯,Spring Integration 的另一个很好的解决方案是 load-balancing 和多个订阅者到相同的 DirectChannel

    @Bean
    public MessageChannel wsChannel() {
       return new DirectChannel(null);
    }
    

    切换默认RoundRobinLoadBalancingStrategy。 之后您可以拥有多个@ServiceActivator(inputChannel="wsChannel")。当第一个失败时,将消息发送到第二个,依此类推,直到每个 URL 都获得良好的结果或下降。

    【讨论】:

    • 在我的配置中,我将网关创建为 Bean,其中包含:“@Bean @ServiceActivator”MessageHandler wsOutboundGateway()。如果我设置另一个网关,我如何定义应该执行哪个 bean?你有 DestinationProvider 的例子吗?
    • 如果您有多个 wsOutboundGateway @Beans 和 `@ServiceActivator` 用于不同的 URL,您应该使用 @Router upstream 来确定哪个 URL 现在可用。
    • 但是如果我有 https 凭据、证书或任何类型的安全性,我该如何测试新的 URLConnection(url).connect()
    • 不错!这绝对是一个非常优雅的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 2010-12-23
    • 2011-09-16
    相关资源
    最近更新 更多