Spring integration Spring集成-具有返回值的消息传递网关
我是Spring集成的新手。我需要实现一个带有返回值的消息传递网关。以便在执行某些同步步骤后异步继续某些处理。所以我做了两个激活剂Spring integration Spring集成-具有返回值的消息传递网关,spring-integration,Spring Integration,我是Spring集成的新手。我需要实现一个带有返回值的消息传递网关。以便在执行某些同步步骤后异步继续某些处理。所以我做了两个激活剂 @Slf4j @MessageEndpoint public class Activator1 { @ServiceActivator(inputChannel = "asyncChannel") public void async(){ log.info("Just async message"); try
@Slf4j
@MessageEndpoint
public class Activator1 {
@ServiceActivator(inputChannel = "asyncChannel")
public void async(){
log.info("Just async message");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
log.error("I don't want to sleep now");
}
}
}
及
管道
@Configuration
public class Pipeline {
@Bean
MessageChannel asyncChannel() {
return new DirectChannel();
}
@Bean
public MessageChannel syncChannel() {
return MessageChannels.direct().get();
}
}
大门
@MessagingGateway
public interface ReturningGateway {
@Gateway(requestChannel = "asyncChannel", replyChannel = "syncChannel")
public ResponseEntity getSyncHttpResponse();
}
和控制器
@Slf4j
@RestController
@RequestMapping("/sync")
public class ResponseController {
@Autowired
ReturningGateway returningGateway;
@PostMapping("/http-response")
public ResponseEntity post() {
return returningGateway.getSyncHttpResponse();
}
}
所以我不确定这是否是我想做的事情的正确方法
你能帮帮我吗?首先让我试着解释一些事情
@网关(requestChannel=“asyncChannel”,replyChannel=“syncChannel”)
requestChannel
是网关发送消息的地方。但是由于gateway方法中没有任何参数,并且没有一个payloadExpression
,因此行为是从该通道“接收”。有关更多信息,请参阅文档:
replyChannel
是等待回复的地方,而不是发送。在大多数情况下,网关依赖于replyChannel
标头进行关联。消息传递中的请求-应答模式。如果是publishsubscribebechannel
,我们需要一个显式的replyChannel
,以某种方式跟踪回复,或者当我们处理无法修改为依赖replyChannel
头的流时。请参阅文档中的相同网关章节
您的用例对我来说并不清楚:您说的是
async
continuation,但同时从网关契约返回的结果看起来像是该sync()
方法的结果。从这里开始,请熟悉gateway合同,然后返回我们,为您的解决方案提供更新的愿景。谢谢Artem。我会读更多关于网关和频道的内容
@Slf4j
@RestController
@RequestMapping("/sync")
public class ResponseController {
@Autowired
ReturningGateway returningGateway;
@PostMapping("/http-response")
public ResponseEntity post() {
return returningGateway.getSyncHttpResponse();
}
}