Will Spring Integrations Task Scheduler Block คือเธรดทั้งหมดใน Task Executor ไม่ว่าง

หากเธรดทั้งหมดใน TaskExecutor ไม่ว่าง (ทั้งหมด 100 รายการ) เธรดที่ใช้โดยโพลเลอร์จะบล็อกหรือไม่ หรือเธรดโพลเลอร์จะทิ้งข้อความไว้ในคิวแล้วลองอีกครั้งในอีก 300 มิลลิวินาที

<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 แหล่งที่มา


คำตอบ (1)


ลักษณะการทำงานขึ้นอยู่กับแอตทริบิวต์ queue-capacity ของผู้ดำเนินการงานและนโยบายการปฏิเสธ

ตามค่าเริ่มต้น คิวจะไม่มีขอบเขต ดังนั้นงานจะถูกจัดคิวจนกว่าคุณจะมีหน่วยความจำไม่เพียงพอ

เมื่อมีขนาดคิวที่ถูกผูกไว้ และไม่มีเธรดที่พร้อมใช้งาน และคิวเต็ม นโยบายเริ่มต้นคือการส่งข้อยกเว้น (นโยบายการปฏิเสธเริ่มต้นจะถูกยกเลิก) คุณสามารถตั้งค่านโยบายการปฏิเสธเป็น CALLER_RUNS ซึ่งในกรณีนี้งานจะทำงานบนเธรดของโพลเลอร์

Spring Integration ให้ CallerBlocksPolicy (ต้องการความจุคิว > 0) แต่เนมสเปซงานไม่รองรับนโยบายที่กำหนดเอง คุณจะต้องกำหนดผู้ดำเนินการเป็น <bean/>

หากต้องการความซับซ้อนมากขึ้น คุณสามารถใช้คำแนะนำแก่ผู้สำรวจความคิดเห็น และ "ข้าม" แบบสำรวจภายใต้เงื่อนไขที่คุณเลือก ดังที่เห็นในลิงค์นั้น เราวางแผนที่จะให้คำแนะนำมาตรฐานในอนาคตอันใกล้นี้

person Gary Russell    schedule 28.09.2014
comment
ขอบคุณ Gary นั่นทำให้ฉันเข้าใจมากขึ้น ลักษณะการทำงานเดียวกันนี้ใช้กับผู้ดำเนินการงานที่กำหนดไว้ในโพลเลอร์หรือไม่ ในกรณีนี้โพลเลอร์จะส่งต่อให้ผู้ปฏิบัติงานทำโพลหรือไม่? หรือผู้ปฏิบัติงานทำการเลือกตั้ง? - person Michael Freeman; 30.09.2014
comment
โพลเลอร์เป็นเธรดตัวกำหนดตารางเวลา (จาก taskScheduler bean) หากคุณไม่ได้ระบุตัวดำเนินการงาน เราจะใช้ SyncTaskExecutor เพื่อให้การสำรวจความคิดเห็นทำงานโดยตรงบนเธรดตัวกำหนดตารางเวลา หากคุณระบุผู้ดำเนินการงาน การสำรวจความคิดเห็นจะถูกส่งออกไป ดังนั้นหากต้องการข้ามการสำรวจความคิดเห็นโดยใช้คำแนะนำ คุณจะต้องมีนโยบาย CALLER_RUNS - person Gary Russell; 30.09.2014