首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >弹簧集成选路滑

弹簧集成选路滑
EN

Stack Overflow用户
提问于 2016-05-24 05:46:20
回答 1查看 483关注 0票数 2

我试图使用spring集成实现路由选择单,配置如下

代码语言:javascript
运行
复制
@Bean
@Transformer(inputChannel = "inputChannel", outputChannel = "replyChannel")
public HeaderEnricher headerEnricher() {
    return new HeaderEnricher(Collections.singletonMap(IntegrationMessageHeaderAccessor.ROUTING_SLIP,
            new RoutingSlipHeaderValueMessageProcessor("channel1", "channel2", "channel3"
                    , "channel4"
            )));

}

代码语言:javascript
运行
复制
 @Bean
public MessageChannel inputChannel() {
    return new DirectChannel();
}


@Bean
@BridgeTo
public MessageChannel replyChannel() {
    return new DirectChannel();
}

为了查阅标题后面的路由选择单,我添加了

代码语言:javascript
运行
复制
@BridgeTo

此实现可以工作,但每2次工作一次,在调试spring代码之后,我无意中发现了这段代码并解决了问题。

在UnicastingDispatcher类中

代码语言:javascript
运行
复制
private boolean doDispatch(Message<?> message) {
    if (this.tryOptimizedDispatch(message)) {
        return true;
    }
    boolean success = false;
    Iterator<MessageHandler> handlerIterator = this.getHandlerIterator(message);
    if (!handlerIterator.hasNext()) {
        throw new MessageDispatchingException(message, "Dispatcher has no subscribers");
    }
    List<RuntimeException> exceptions = new ArrayList<RuntimeException>();
    while (!success && handlerIterator.hasNext()) {
        MessageHandler handler = handlerIterator.next();
        try {
            handler.handleMessage(message);
            success = true; // we have a winner.
        }
        catch (Exception e) {
            RuntimeException runtimeException = this.wrapExceptionIfNecessary(message, e);
            exceptions.add(runtimeException);
            this.handleExceptions(exceptions, message, !handlerIterator.hasNext());
        }
    }
    return success;
}


Iterator<MessageHandler> handlerIterator = this.getHandlerIterator(message); 

给出org.springframework.integration.jms.JmsSendingMessageHandler#11,routingSlip.replyChannel.bridgeTo.handler

它是在循环的基础上采摘。因此,一旦它下一个选择了BridgeHandler和JmsSendingMessageHandler。

是否有任何配置我错过了咨询BridgeHandler一直?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-24 13:39:17

看上去你在频道上有两个订户。

当一个信道上有多个使用者时,循环调度是正常的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37405302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档