1
我正在嘗試建立一個集成流,其中輸入通道是一個充當非阻塞隊列的隊列。我現在看到的是,如果我從Spring MVC控制器觸發消息處理,如果消息處理需要時間,控制器將不會返回並等待消息處理程序(Service Activator)完成。春季集成DSL非阻塞隊列配置
下面是一個集成的配置
@Bean(name = "createIssue.input")
MessageChannel queueInput() {
return MessageChannels.queue(10)
.get();
}
@Bean(name = PollerMetadata.DEFAULT_POLLER)
PollerMetadata poller() {
return Pollers.fixedRate(100)
.maxMessagesPerPoll(1)
.get();
}
@Bean
IntegrationFlow createIssue() {
return IntegrationFlows.from(queueInput())
.split()
.transform(mytransformer, "convert")
.handle(myservice, "createIssue")
.get();
}
myservice
和mytransformer
只是普通的Spring beans。
我有一個Spring MVC REST控制器,它使用其中一個GET處理程序中的網關寫入createIssue.input
隊列。
如果我在myservice.createIssue()
方法中設置了斷點,我可以看到控制器沒有從它的方法返回,所以觸發控制器的外部服務必須等待我的服務完成。 我想實現的是有一個異步處理隊列,網關只需將消息寫入隊列並立即返回。我怎樣才能做到這一點?
謝謝,似乎在我的配置中一切都很好。我不應該用調試斷點來測試它。我用'sleep()'代替,它工作正常。 –