2013-11-26 161 views
0

我想製作一個線程塊,直到它獲得pubsub消息。似乎沒有辦法做到這一點,因爲PublishSubscribeChannel沒有實現PollingChannel。唯一的選擇是使用MessageHandler進行訂閱,但該處理程序將無法在同一個線程上進行阻止。有其他選擇嗎?彈簧集成 - 使pubsub塊

我也看了一下MessagingTemplate類,但它似乎也不支持這一點。

感謝, 羅伊

回答

2

查看回答您的其他問題...

Spring Integration - programmatically create/teardown channels

在只需設置超時爲-1(或一些非常大的數字)。

當發佈者發送到pubsub;它將調用(訂閱的)橋接器,它將發送到QueueChannel的消息並切換到被阻塞的線程。

+0

感謝加里 - 這種情況有點不同 - 在這種情況下,我會有100個線程監聽等待消息的同一個pubsub。我可以再次在每個線程中創建一個QueueChannel,但感覺過度殺傷,因爲如果我丟失了消息就沒關係。我希望pubsub應該能夠阻止,而不必與QueueChannel橋接。 –

+0

PS - 只是注意到你是Spring集成的主要提交者,所以也許我會質疑你的答案少一點;) –

+1

否問題:) SI有兩種通道類型:「PollableChannel」(隊列,優先級,集合點)和「SubscribableChannel」(直接執行程序,pubsub)。這聽起來像你想要一個通道,其中任何坐在'receive()'中的線程都會得到該消息。我們沒有這樣的事情。你可以編寫一個非常輕量級的'MessageHandler',它有一個內部'BlockingQueue'和一個接收方法。當一個調用者調用receive()時,它可以做'pubsub.subscribe(this)'然後等待輪詢內部隊列。 'handleMessage()'將添加到隊列中。不再感興趣時,您可以退訂。 –