我在outboundChannel
上得到一个异常Dispatcher has no subscribers
,不知道为什么。我确信它很简单,我已经将我的代码剥离到下面一个非常简单的示例:
我的上下文是:
<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
实际上正在处理请求。
没有参数的receive()
需要回复通道为PollableChannel
,参见文档
添加<queue/>
到outboundChannel
.
或者,您可以将网关方法更改为String sendAndReceive(String in)
,一切都将按预期工作(您甚至可以完全删除outboundChannel
)。