我在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
实际上正在处理请求。
答案 0 :(得分:6)
receive()
需要将回复频道设为PollableChannel
,请参阅the documentation。
将<queue/>
添加到outboundChannel
。
或者,您可以将网关方法更改为String sendAndReceive(String in)
,并且所有方法都可以按预期工作(您甚至可以完全删除outboundChannel
。)