Spring Integration: Aggregator เพื่อหมดอายุข้อความเมื่อหมดเวลา

ฉันใช้รูปแบบตัวรวบรวมของ SI เพื่อจัดกิจกรรมและรอเหตุการณ์ที่เสร็จสิ้นและจัดเก็บไว้ในร้าน JdbcMessage ฉันได้สร้างตาราง INT_MESSAGE, INT_MESSAGE_GROUP และ INT_GROUP_TO_MESSAGE แล้ว

บางครั้งเหตุการณ์ที่เสร็จสมบูรณ์อาจไม่พร้อมใช้งาน และฉันต้องการทำให้เหตุการณ์เสร็จสิ้นและละทิ้ง ให้ลบออกจากตาราง ฉันไม่ต้องการให้โต๊ะใหญ่โตโดยไม่จำเป็น

ฉันได้ระบุการกำหนดค่าด้านล่างในไปป์ไลน์แล้ว

                        .expireGroupsUponCompletion(true)
                        .expireGroupsUponTimeout(true)
                        .groupTimeout(groupMessageTimeOut)
                        .sendPartialResultOnExpiry(false)

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

กรุณาแนะนำ


person sam    schedule 06.02.2020    source แหล่งที่มา


คำตอบ (1)


สรุปของคุณถูกต้อง ทั้ง .expireGroupsUponCompletion(true) & .expireGroupsUponTimeout(true) จะลบกลุ่มออกจากร้านค้า sendPartialResultOnExpiry(false) ทำสิ่งที่คุณถามจริงๆ:

if (this.sendPartialResultOnExpiry) {
        if (this.logger.isDebugEnabled()) {
            this.logger.debug("Prematurely releasing partially complete group with key ["
                    + correlationKey + "] to: " + getOutputChannel());
        }
        completeGroup(correlationKey, group, lock);
    }
    else {
        if (this.logger.isDebugEnabled()) {
            this.logger.debug("Discarding messages of partially complete group with key ["
                    + correlationKey + "] to: "
                    + (this.discardChannelName != null ? this.discardChannelName : this.discardChannel));
        }
        if (this.releaseLockBeforeSend) {
            lock.unlock();
        }
        group.getMessages()
                .forEach(this::discardMessage);
    }

โปรดบอกเราหน่อยว่าอะไรทำให้คุณสับสนเกี่ยวกับการกำหนดค่านั้น

person Artem Bilan    schedule 06.02.2020