在自定义方法与@Gateways方法上使用@Async批注处理异步过程中的错误

阿卜杜勒·雷曼

我有一个需要将文件异步上传到Sftp服务器的过程。因此,在探索了有关网关的异步的更多信息之后,我发现我需要在@MessagingGateway参数中定义错误通道,然后在处理程序中处理传播到错误通道的异常,但是我觉得这种方式对我来说很复杂,因为我必须更新Pojo字段并根据文件上传,成功或失败,将其持久保存到数据库中。

因此,我想到了一个带有注释的自定义方法@Async并调用网关方法。还使用try块环绕网关方法并捕获下游发生的任何异常

代码样例:

 @Async
void upload(Resource file, FileStatus fileStatus){
    try{
        uploadGateway.upload(file,fileStatus.getFilePath(),fileStatus.getFileName());
    }catch(RuntimeException e){
        fileStatus.setUploadStatus("Failed");
        //save into db
    }
}

上载没有错误通道的网关,以便可以将错误发送回呼叫者

 @MessagingGateway
 public interface UploadGateway {


@Gateway(requestChannel = "input.channel")
void upload(@Payload Resource file, @Header("path") String path, @Header("name") String fileName);
}

处理程序:

 @Bean
public IntegrationFlow uploadDocument() {
    return IntegrationFlows.from("input.channel")
            .log(LoggingHandler.Level.WARN)
            .handle(Sftp.outboundAdapter(sftpSessionFactory(), FileExistsMode.FAIL)
                    .autoCreateDirectory(true)
                    .remoteDirectoryExpression("headers['path']")
                    .fileNameExpression("headers['name']"))
            .get();
}

问题:如果我以这种方式处理错误,后果将是什么?这是处理下游流量中发生的任何错误的正确方法吗?

阿尔特姆·比兰(Artem Bilan)

由于@MessagingGateway像消息传递中的RPC一样,完全可以在这样的方法调用上捕获异常。由于您使流程完全同步,因此它就像典型的Java异常子系统一样工作。

您对异步错误处理的关注errorChannel确实很有意义,因为它的复杂度与标准Java异步方法处理及其错误处理相似。

另一方面,errorChannel如果在其他流程中使用一些复杂的逻辑,确实值得推荐通过下游处理错误另外,您将返回一些补偿消息。

然而,归根结底,选择权由您自己决定:自己处理错误没有缺点。

有关更多思考的内容,请参见错误处理章节。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在自定义方法与@Gateways方法上使用@Async批注处理异步过程中的错误

来自分类Dev

在自定义方法与@Gateways方法上使用@Async批注处理异步过程中的错误

来自分类Dev

存储过程中的自定义错误

来自分类Dev

使用较少的match子句在scala中处理自定义错误的最干净和最佳方法

来自分类Dev

有没有一种方法可以使用自定义继承过程中的字段执行计算?

来自分类Dev

在验证过程中响应自定义状态代码

来自分类Dev

创建过程中的openssl自定义属性

来自分类Dev

在存储过程中使用自定义类型

来自分类Dev

使用自定义授权测试异步Web API方法

来自分类Dev

自定义CollectionView标头在滚动过程中消失(自定义UICollectionFlowLayout)

来自分类Dev

使用访存和ES6 Promise处理自定义错误的最干净方法

来自分类Dev

在自定义JsonConverter的ReadJson方法中处理空对象

来自分类Dev

使用自定义消息处理错误?

来自分类Dev

在Django Admin上使用自定义save()方法保存模型后,返回错误消息

来自分类Dev

错误:操作必须是普通对象。使用自定义中间件进行异步操作。 - 即使操作包含方法

来自分类Dev

AngularJS全局错误处理-自定义方法错误处理程序不会触发

来自分类Dev

在构建过程中如何使用自定义自动生成工具修改源文件“ file.cs”?

来自分类Dev

我可以在自定义过程中或使用JavaScript检查表单是否脏了吗?

来自分类Dev

在错误消息中返回自定义验证方法参数

来自分类Dev

在JavaScript中创建自定义错误的正确方法

来自分类Dev

使用自定义方法模型laravel删除记录错误

来自分类Dev

在laravel中的redirect()helper上添加自定义方法

来自分类Dev

Java:在“自定义”列表上使用addAll方法

来自分类Dev

使用自定义方法进行验证并向错误中添加一条消息

来自分类Dev

在C程序执行过程中如何显示自定义提示?

来自分类Dev

如何自定义拖放过程中显示的视图?

来自分类Dev

在Office加载项的安装过程中创建自定义注册表设置

来自分类Dev

在部署过程中,如何自动分配所需的状态配置自定义资源?

来自分类Dev

在上传过程中向GridFS Meteor FS文件添加自定义属性

Related 相关文章

  1. 1

    在自定义方法与@Gateways方法上使用@Async批注处理异步过程中的错误

  2. 2

    在自定义方法与@Gateways方法上使用@Async批注处理异步过程中的错误

  3. 3

    存储过程中的自定义错误

  4. 4

    使用较少的match子句在scala中处理自定义错误的最干净和最佳方法

  5. 5

    有没有一种方法可以使用自定义继承过程中的字段执行计算?

  6. 6

    在验证过程中响应自定义状态代码

  7. 7

    创建过程中的openssl自定义属性

  8. 8

    在存储过程中使用自定义类型

  9. 9

    使用自定义授权测试异步Web API方法

  10. 10

    自定义CollectionView标头在滚动过程中消失(自定义UICollectionFlowLayout)

  11. 11

    使用访存和ES6 Promise处理自定义错误的最干净方法

  12. 12

    在自定义JsonConverter的ReadJson方法中处理空对象

  13. 13

    使用自定义消息处理错误?

  14. 14

    在Django Admin上使用自定义save()方法保存模型后,返回错误消息

  15. 15

    错误:操作必须是普通对象。使用自定义中间件进行异步操作。 - 即使操作包含方法

  16. 16

    AngularJS全局错误处理-自定义方法错误处理程序不会触发

  17. 17

    在构建过程中如何使用自定义自动生成工具修改源文件“ file.cs”?

  18. 18

    我可以在自定义过程中或使用JavaScript检查表单是否脏了吗?

  19. 19

    在错误消息中返回自定义验证方法参数

  20. 20

    在JavaScript中创建自定义错误的正确方法

  21. 21

    使用自定义方法模型laravel删除记录错误

  22. 22

    在laravel中的redirect()helper上添加自定义方法

  23. 23

    Java:在“自定义”列表上使用addAll方法

  24. 24

    使用自定义方法进行验证并向错误中添加一条消息

  25. 25

    在C程序执行过程中如何显示自定义提示?

  26. 26

    如何自定义拖放过程中显示的视图?

  27. 27

    在Office加载项的安装过程中创建自定义注册表设置

  28. 28

    在部署过程中,如何自动分配所需的状态配置自定义资源?

  29. 29

    在上传过程中向GridFS Meteor FS文件添加自定义属性

热门标签

归档