Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring integration 如何编写基本的自定义路由器?_Spring Integration - Fatal编程技术网

Spring integration 如何编写基本的自定义路由器?

Spring integration 如何编写基本的自定义路由器?,spring-integration,Spring Integration,我在一个非常简单的自定义路由器上得到了路由器的不支持的返回类型: @Autowired @Qualifier("fromJsonToJsonChannel") private MessageChannel fromJsonToJsonChannel; public AbstractMessageRouter determineTransformation(Message<?> message) { return new AbstractMessageRouter() {

我在一个非常简单的自定义路由器上得到了路由器的
不支持的返回类型

@Autowired
@Qualifier("fromJsonToJsonChannel")
private MessageChannel fromJsonToJsonChannel;

public AbstractMessageRouter determineTransformation(Message<?> message) {
    return new AbstractMessageRouter() {

        @Override
        protected Collection<MessageChannel> determineTargetChannels(Message<?> message) {
            return Collections.singletonList(fromJsonToJsonChannel);
        }

    };
}

通道自动接线正确。我做错了什么?

我们需要从您的应用程序中了解更多信息,以及您如何使用该
determineTransformation()

您提到的错误仅在以下情况下发生:

protected Collection<MessageChannel> determineTargetChannels(Message<?> message) {
    Collection<MessageChannel> channels = new ArrayList<MessageChannel>();
    Collection<Object> channelKeys = this.getChannelKeys(message);
    addToCollection(channels, channelKeys, message);
    return channels;
}
通过这种方式,您可以对调用路由器的
方法调用
来对每个请求消息调用
determineTransformation
。查看您的代码,您错误地决定为这些消息创建一个新的
AbstractMessageRouter
实例

根据您的要求:

其想法是让自定义路由器使用消息,然后使用一些基于数据库的信息(配置)来确定将消息路由到哪个通道

拥有一个定制的POJO方法并返回所需的
MessageChannel
s集合就足够了,但对于每个请求消息,不需要新的
AbstractMessageRouter
实例。粗略地说,一定是这样的:

public MessageChannel determineTransformation(Message<?> message) {
     return fromJsonToJsonChannel;
}
public MessageChannel determineTransformation(消息消息){
从JSONTOJSONCHANNEL返回;
}
当然,您可以在方法中应用任何自定义逻辑,但关键是您不需要了解任何关于
路由器的抽象。您只需按照约定返回一个
MessageChannel
或其名称(或其集合或数组)。与
AbstractMessageRouter
无关


如果我还缺少一些你的意见,请告诉我

如果你能分享你的配置,更多的堆栈跟踪和原因,那就太好了。对不起,我们这里不玩间谍游戏。对不起,阿泰姆。我太快进入了。我编辑了我的问题,以包括xml部分和stacktrace。我们的想法是让自定义路由器使用消息,然后使用一些基于数据库的信息(配置)来确定将此路由到哪个通道。请查看我的答案的更新。
protected Collection<MessageChannel> determineTargetChannels(Message<?> message) {
    Collection<MessageChannel> channels = new ArrayList<MessageChannel>();
    Collection<Object> channelKeys = this.getChannelKeys(message);
    addToCollection(channels, channelKeys, message);
    return channels;
}
<int:router method="determineTransformation" input-channel="inputChannel"
            default-output-channel="fromJsonToJsonChannel">
    <beans:bean class="com.insightguard.poc.inject.pocinject.CustomRoute"/>
</int:router>
public MessageChannel determineTransformation(Message<?> message) {
     return fromJsonToJsonChannel;
}