Spring集成网关“Dispatcher没有订阅者”

时间:2014-05-16 13:40:06

标签: spring-integration

我在Dispatcher has no subscribers上收到例外outboundChannel,无法找出原因。我确信它很简单,我已将我的代码删除到下面一个非常简单的示例:

我的背景是:

<bean id="requestService"
    class="com.sandpit.RequestService" />

<integration:channel id="inboundChannel" />

<integration:service-activator id="service"
    input-channel="inboundChannel"
    output-channel="outboundChannel"
    ref="requestService"
    method="handleRequest" />

<integration:channel id="outboundChannel" />

<integration:gateway id="gateway"
    service-interface="com.sandpit.Gateway"
    default-request-channel="inboundChannel"
    default-reply-channel="outboundChannel" />

<bean class="com.sandpit.GatewayTester">
    <property name="gateway"
        ref="gateway" />
</bean>

我的Java代码是:

public interface Gateway {

    String receive();
    void send(String message);
}

public class RequestService {

    public String handleRequest(String request) {

        return "Request received: " + request;
    }
}

public class GatewayTester implements ApplicationListener<ContextRefreshedEvent> {

    private Gateway gateway;

    public void setGateway(Gateway gateway) {

        this.gateway = gateway;
    }

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {

        gateway.send("Hello world!");
        System.out.println("FROM SERVICE: " + gateway.receive());
    }
}

注意:断点确实告诉我RequestService实际上正在处理请求。

1 个答案:

答案 0 :(得分:6)

没有参数的

receive()需要将回复频道设为PollableChannel,请参阅the documentation

<queue/>添加到outboundChannel

或者,您可以将网关方法更改为String sendAndReceive(String in),并且所有方法都可以按预期工作(您甚至可以完全删除outboundChannel。)