1

同期通信の非常に簡単な例があります。

                        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);
4

0 に答える 0