spring集成:消息不会从生产者端点传递到使用者端点

yjghlzjz  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(309)

我编写了一个程序,其中生产者端点将消息发送到“inputchannel”,消费者端点从inputchannel读取消息并将回复发送到ackchannel。
找到下面的代码段。

@Component
public class ProducerEndpoint {

    @ServiceActivator(outputChannel = "inputChannel")
    public Message<String> produceMessage(String message) {
        return MessageBuilder.withPayload("Message Received").build();
    }

    @ServiceActivator(inputChannel = "ackChannel")
    public void receiveAcknowledgement(String message) {
        System.out.println("From Consumer : " + message);
    }

}

用户EDN点

@Component
public class ConsumerEndpoint {

    @ServiceActivator(inputChannel = "inputChannel", outputChannel = "ackChannel", requiresReply="true")
    public Message<String> consumeMessage(Message<String> message) {
        System.out.println("From Producer : " + message);
        return MessageBuilder.withPayload("Message Received").build();
    }
}

当我使用producemessage方法将消息发送到生产者终结点时,它不会到达使用者的“consumemessage”方法。我漏了什么吗?

producerEndpoint.produceMessage("Hello World");

但是,当我将消息直接发送到inputchannel时,它将通过consumemessage方法接收,并通过receiveacknowledgement方法发送回复。
当我将producerendpoint建模为如下所示的messaginggateway时,一切正常。

@Component
@MessagingGateway(name = "myGateway", defaultRequestChannel = "inputChannel")
public interface ProducerEndpoint {

    @Gateway(requestChannel = "inputChannel", replyTimeout = 2, requestTimeout = 200)
    public void produceMessage(String message);

}

当我直接调用方法时,服务激活器不能将消息发送到outputchannel吗?

hk8txs48

hk8txs481#

您似乎误解了spring集成的概念。
呼叫 @ServiceActivator 方法直接对消息传递不起任何作用。
您需要使用网关或其他消息传递机制将消息发送到端点。
可以使用 @Publish 将方法调用的结果发布为消息。
https://docs.spring.io/spring-integration/docs/current/reference/html/message-publishing.html#message-出版

相关问题