同期通信の非常に簡単な例があります。
gateway -> router -> channel1
-> channel2
-> channelx
ここに私の定義があります:
<si:channel id="sendToChannel"/>
<si:gateway id="sender"
service-interface="com.messaging.MessageGateway"
default-request-channel="sendToChannel"/>
<si:router id="messageRouter"
input-channel="sendToChannel" >
<bean class="com.messaging.MessageRouter"/>
</si:router>
ルーターは次のように定義されます。
public class MessageRouter {
/** Route messages on the basis of message DESTINATION. */
public String routeMessage(Message<?> message) {
if (message.getDestination().equals("channel1")) {
return "channel1";
...
なぜこの例外が発生するのですか? geteway は DirectChannel sendToChannel へのディスパッチャーになれないということですか?
Caused by: org.springframework.integration.MessageDeliveryException: Dispatcher has no subscribers for channel sendToChannel.
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:82) ~[spring-integration-core-2.2.5.RELEASE.jar:na]
at
... 77 common frames omitted
更新: より多くの情報が追加されました
私が送信しているメッセージには、送信元/送信先/メッセージ タイプ情報を含むヘッダーと、マップまたは空の文字列のいずれかであるペイロードが含まれています。
私のゲートウェイ インターフェイスは次のようになります。
public interface MessageGateway {
public static final String EMPTY = "'EMPTY_PARAMS'";
@Gateway
public void sendMessage(
@Headers Map<String, Object> headers,
@Payload Map<MessageParameter,String> hm);
/** Send a message with empty payload. */
@Gateway
@Payload(EMPTY)
public void sendMessage(@Headers Map<String, Object> headers);
@Gateway
public void sendRawMessage(Message<?> message);