Akankah Blok Penjadwal Tugas Integrasi Musim Semi membuat semua utas di Pelaksana Tugas sibuk

Jika semua utas di taskExecutor sibuk (Semuanya 100). Apakah thread tersebut akan digunakan oleh poller block? Atau akankah rangkaian polling meninggalkan pesan di antrean dan mencoba lagi dalam 300 mdtk lagi?

<int:channel id="tasksIn">
    <int:queue capacity="50"/>    
</int:channel>

<int:bridge input-channel="tasksIn" output-channel="taskProcessing" >
    <int:poller fixed-rate="300" max-messages-per-poll="2" />
</int:bridge>

<int:channel id="taskProcessing">
    <int:dispatcher task-executor="executor"/>
</int:channel>

<service-activator input-channel="taskProcessing" output-channel="taskCompleteChannel" ref="taskProcessor" method="processTask"/>

<task:executor id="executor" pool-size="100" />

person Michael Freeman    schedule 28.09.2014    source sumber


Jawaban (1)


Perilakunya bergantung pada atribut queue-capacity pelaksana tugas dan kebijakan penolakannya.

Secara default, antrean tidak dibatasi sehingga tugas akan diantri hingga Anda akhirnya kehabisan memori.

Ketika ada ukuran antrean yang dibatasi dan tidak ada thread yang tersedia serta antrean penuh, kebijakan defaultnya adalah mengeluarkan pengecualian (kebijakan penolakan default dibatalkan). Anda dapat mengatur kebijakan penolakan ke CALLER_RUNS, dalam hal ini tugas akan dijalankan di thread poller.

Integrasi Musim Semi menyediakan CallerBlocksPolicy (membutuhkan kapasitas antrian > 0) tetapi namespace tugas tidak mendukung kebijakan khusus, Anda harus mendefinisikan pelaksana sebagai <bean/>.

Untuk lebih canggihnya, Anda dapat menerapkan saran kepada pemberi suara dan "lewati" jajak pendapat berdasarkan ketentuan yang Anda pilih. Seperti yang dapat dilihat di tautan tersebut, kami berencana untuk memberikan saran standar dalam waktu dekat.

person Gary Russell    schedule 28.09.2014
comment
Terima kasih Gary, itu memperjelas pemahaman saya. Apakah perilaku yang sama berlaku untuk pelaksana tugas yang ditentukan pada poller? Dalam hal ini apakah pemberi suara menyerahkan kepada pelaksana tugas untuk melakukan pemungutan suara? Atau apakah pelaksana tugas melakukan polling? - person Michael Freeman; 30.09.2014
comment
Poller adalah thread penjadwal (dari kacang taskScheduler). Jika Anda tidak menyediakan pelaksana tugas, kami menggunakan SyncTaskExecutor sehingga jajak pendapat berjalan langsung di thread penjadwal. Jika Anda menyediakan pelaksana tugas, jajak pendapat akan diserahkan kepadanya sehingga untuk melewati jajak pendapat menggunakan saran, Anda memerlukan kebijakan CALLER_RUNS. - person Gary Russell; 30.09.2014