2013-03-19 26 views
1

在我的Spring集成配置中,我有隊列,任務執行程序。我想更改隊列容量,任務執行者池大小和固定延遲。我想要一個UI頁面,並且如果有更多的消息需要處理,或者如果重負載不得不重建和部署應用程序,應該能夠更改配置。Spring集成 - 池大小的動態配置,任務執行程序和隊列的隊列容量

例:

<si:service-activator input-channel="MessageChannel" ref="messageHandler" 
          method="handleMessage" output-channel="ackChannel"> 

    <si:poller task-executor="messageTaskExecutor" fixed-delay="1000"/> 
</si:service-activator> 

<task:executor id="messageTaskExecutor" pool-size="10" 
queue-capacity="10" keep-alive="1" rejection-policy="CALLER_RUNS"/> 

我想動態地改變這個數字並重新加載配置拿起變化。如果你能指出我正確的方向,那將是非常好的。

回答

1

您需要將您的任務執行程序,隊列等注入常規bean。然後只需在運行時爲它們設置參數。例如

<task:executor id="messageTaskExecutor" pool-size="10" 
    queue-capacity="10" keep-alive="1" rejection-policy="CALLER_RUNS"/> 

會產生ThreadPoolExecutor類型的豆與名稱messageTaskExecutor。因此,它可以被注入爲:

@Autowired @Qualifier("messageTaskExecutor") // or @Inject @Named("messageTaskExecutor") 
ThreadPoolExecutor messageTaskExecutor; 

之後,你可能只需要調用messageTaskExecutor.setMaximumPoolSize

+0

好,我有多個服務激活多任務執行是指同一@ bean.method(),但不同的輸入和輸出通道的池大小和隊列容量。 – John 2013-03-19 20:41:20

+1

但是,問題是什麼?每個人都使用不同的限定詞注入。或者只是將它們全部注入List ... – 2013-03-19 20:43:47

+0

是否沒有辦法使xml配置工作。我有大約15到20個頻道,服務激活者和任務執行者。如果沒有其他方法,那麼我將在註釋中重寫配置。我閱讀關於消息總線,但無法找到一個很好的例子它是否有助於任何想法? – John 2013-03-19 20:47:23