微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Azure BlobClient.beginCopy(..) 失败,错误为组 main 中的调度程序工作器失败,出现未捕获的异常,函数响应 http 503

如何解决Azure BlobClient.beginCopy(..) 失败,错误为组 main 中的调度程序工作器失败,出现未捕获的异常,函数响应 http 503

以下是我的代码

try (CSVReader reader = new CSVReader(new FileReader(csvFile.getAbsolutePath()))) {
            //List<String[]> r = reader.readAll();            
            String[] lineInArray;
            int count = 0;
            while ((lineInArray = reader.readNext()) != null) {
                String interId = lineInArray[0];
                String fileId = null;
                String mp3Name = null;
                List<Map<String,Object>> filesList = ccrDao.retrieveCallIdAndpaths(interId);
                
                for (Iterator iterator = filesList.iterator(); iterator.hasNext();) {
                    Map<String,Object> map = (Map<String,Object>) iterator.next();
                    
                    fileId = map.get("C_CALL_ID")!=null?map.get("C_CALL_ID").toString():"";
                    mp3Name = map.get("C_FILENAME")!=null?map.get("C_FILENAME").toString():"";
                    
                    if(!fileId.equals("") && !mp3Name.equals("")) {
                        String blobName = fileId+"/"+mp3Name;
                        context.getLogger().info("blobName: "+blobName);
                        BlobClient sourceBlobClient = srcContainer.getBlobClient(blobName);
                        context.getLogger().info("source blob client");
                        BlobClient destBlobClient = dstnContainer.getBlobClient(blobName);
                        context.getLogger().info("destination blob client");
                        
                        if(!destBlobClient.exists()) {
                            context.getLogger().info("blobName doesnt exist :"+blobName);
                            BlobServiceSasSignatureValues sas = new BlobServiceSasSignatureValues(OffsetDateTime.Now().plusHours(1),BlobContainerSasPermission.parse("r"));
                            String sasToken = sourceBlobClient.generateSas(sas);
                            context.getLogger().info("generated sas token :"+sasToken);
                            destBlobClient.begincopy(sourceBlobClient.getBlobUrl()+"?"+ sasToken,null);
                            //destBlobClient.copyFromUrl(sourceBlobClient.getBlobUrl());
                            context.getLogger().info(interId+"copied successfully");
                        }else {
                            context.getLogger().info("blob already exists");
                        }

                    }else {
                        context.getLogger().info("No file is present");
                        
                    }

                }
                count++;
                context.getLogger().fine("Recourd Count "+count);
            }
            
        } catch (Exception e ) { //IOException | Csvexception
            context.getLogger().severe("Error occured while copying the data :"+e.getMessage());
            e.printstacktrace();
        }

在线获得以下错误

"destBlobClient.begincopy(sourceBlobClient.getBlobUrl()+"?"+ sasToken,null);" 
正文 {font-family:Arial;左边距:40px; }img { 边框:0 无; }#content { margin-left: auto; margin-right: auto }#message h2 { font-size: 20px;字体粗细:正常;颜色:#000000;边距:34px 0px 0px 0px }#message p { 字体大小:13px;颜色:#000000;边距:7px 0px 0px0px}#errorref { 字体大小:11px;颜色:#737373; margin-top: 41px }服务不可用

我们的服务现在不可用

我们正在努力尽快恢复所有服务。请尽快回来查看。

0XjmzYAAAAAC2Ast2oBmIS47phNpxTuFBQk9NMDFFREdFMDIxOQA3ZGIwYWMxYy1iNzZkLTRiYTQtYTE3NS01NTgxNTUxMTEzZDU=

解决方法

我终于找到了解决方案,怀疑这些问题与层或任何扩展问题无关。虽然执行我的函数没有显示完整的日志,我的代码也无法捕获异常,所以我按照以下步骤操作。

  1. 通过 Kudu -Debug 控制台检查了“主机”日志。
  2. 能够在 beginCopy() 步骤中找到实际错误,如下所述

2021-05-31T14:37:48.513 [Information] 2021-05-31 14:37:48.494 ERROR 5820 --- [parallel-1] reactor.core.scheduler.Schedulers : 组 main 中的调度程序工作器失败未捕获的异常 2021-05-31T14:37:48.513 [信息] java.lang.NoSuchMethodError: okhttp3.RequestBody.create(Lokio/ByteString;Lokhttp3/MediaType;)Lokhttp3/RequestBody;

  1. 对上述错误进行分析后,通过添加以下依赖项覆盖我的 pom.xml 中的 okhttp 版本
<dependency>      
       <groupId>com.squareup.okhttp3</groupId>     
       <artifactId>okhttp</artifactId>     
       <version>4.9.1</version>      
</dependency>
  1. 清理包并用现有库替换所有库。不要只替换函数应用中的一个库,因为它的依赖库如 okio jar 也必须更新

如果您认为解决方案有效并且能够解决上述问题,请点赞。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。