簡體   English   中英

Spring集成:具有訂購者的發布/訂閱通道上的異常處理

[英]Spring Integration: Exception Handling on Publish/Subscribe Channels with Ordered Subscribers

給定配置有任務執行器的發布-訂閱通道,如果有人拋出異常,是否有可能中斷其有序訂閱者的調用?

例如,在此示例中,“工作”消息仍由第二個服務激活器按順序發送。 我希望這不會發生。

    <int:publish-subscribe-channel id="input" task-executor="taskExecutor" />

    <int:service-activator
        input-channel="input"
        order="1" 
        expression="1 / 0" 
        output-channel="nullChannel"
    />
    <int:service-activator
        input-channel="input"
        order="2" 
        expression="'worked'" 
        output-channel="output"
    />

    <int:channel id="output">
        <int:queue />
    </int:channel>

現實世界中的用例稍微復雜一點,因為File被發布給兩個訂戶,一個用於解析文件的內容,另一個用於歸檔到S3。 將應用序列,以便在兩個任務均完成后可以將其匯總和刪除。

S3上傳是通過不返回任何答復的出站通道適配器實現的。 這樣,存在一個發布-訂閱通道,該通道首先調用S3適配器(使用order屬性),然后將File發送到網橋,然后將其放置在收集聚合消息的通道上。

如果S3上傳失敗,我不想刪除該文件,因此不得調用上游通道的第二個訂閱者。

添加任務執行程序時,“ order”屬性實際上沒有任何意義,因為這兩個任務都是異步執行的。 中斷“第二”線程可能為時已晚。 要回答您的一般問題,不,一個線程的故障不會中斷其他線程。

如果我正確理解了用例,則應該可以使用新的2.2 <request-handler-advice-chain/>功能執行所需的操作,在此功能中,您可以添加ExpressionEvaluatingRequestHandlerAdvice以根據成功或失敗采取不同的操作。 在此博客中對此進行了討論... http://blog.springsource.org/2012/10/09/spring-integration-2-2-retry-and-more/ ,尤其是它引用的示例代碼(針對FTP適配器)...

<int-ftp:outbound-channel-adapter
    channel="inputChannel"
    session-factory="mockSessionFactory"
    remote-directory="foo">
    <int-ftp:request-handler-advice-chain>
        <bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice">
            <property name="onSuccessExpression" value="payload.delete()" />
            <property name="successChannel" ref="afterSuccessDeleteChannel" />
            <property name="onFailureExpression" value="payload.renameTo(payload.absolutePath + '.failed.to.send')" />
            <property name="failureChannel" ref="afterFailRenameChannel" />
        </bean>
    </int-ftp:request-handler-advice-chain>
</int-ftp:outbound-channel-adapter>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM