spring-integration:消息不会从生产者端点传递到消费者端点



我写了一个程序,生产者端点将消息发送到"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);
}
}

消费者ednpoint

@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方法将消息发送到生产者端点时,它并没有到达消费者的consumerMessage方法。我是不是遗漏了什么?

producerEndpoint.produceMessage("Hello World");

但当我直接将消息发送到inputChannel时,consumerMessage方法会接收消息,并将回复发送到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吗?

您似乎误解了Spring Integration的概念。

直接调用@ServiceActivator方法与消息传递无关。

您需要使用网关或其他消息传递机制向端点发送消息。

可以使用@Publish对任意方法进行注释,以将方法调用的结果发布为消息。

https://docs.spring.io/spring-integration/docs/current/reference/html/message-publishing.html#message-发布

最新更新