-
DevCloud Maven私有依赖库批量迁移和维护工具介绍 使用场景: 1.当你需要使用华为云DevCloud中的maven私有依赖库服务时,迁移神器可以帮助你将原来自己本地私服中的私有组件批量迁移到云上。2.当你需要对DevCloud上maven私有依赖库中的组件进行批量更新维护时,该工具也能提供帮助。必要准备条件:安装JDK1.7+以上。 JDK下载地址:https://repo.huaweicloud.com/java/ 使用方法:1.登录华为云并进入DevCloud服务,从左上角目录菜单中进入私有依赖库服务,如下图:2.在Maven私有依赖库中选择"更多操作”>>“批量迁移和维护”操作下载工具包,如下图:3.双击打开工具包,展示如下页面: 说明:1)选择本地目录上传时,如果目录中只有jar包而没有匹配的坐标说明文件pom.xml将无法上传成功。2)同一目录下的jar包必须要和其对应的POM文件同名,否则会提示查询失败。4.在DevCloud Maven私有依赖库页面,通过选择“更多操作”>>“仓库地址”可以获取上诉工具需要填入的maven私有依赖库仓库地址,复制后填入即可。5.在DevCloud Maven私有依赖库页面,通过选择“立即使用”后弹出的提示框中可以下载maven setting.xml配置文件,setting.xml文件中<server></server>标签中的username和password的内容就是工具需要的私有依赖库的账号和密码。如下图最后,如您在使用中有任何疑问或建议,可直接在帖子中回帖或通过DevCloud页面中右上角区域的“意见反馈”找到我们获取帮助,我们将会及时响应。祝使用开心!
-
实验目的通过使用Java+SDK管理华为云对象存储OBS,了解对象存储的基本原理和操作,熟悉SDK的使用方法,为后续需要开发复杂功能提供入门准备。准备动作1、电脑上安装Java开发环境+Eclipse,可参考网上的教程:Java安装教程:http://www.runoob.com/java/java-environment-setup.html#win-installEclipse+汉化教程:https://blog.csdn.net/weixin_41848531/article/details/817364142、下载华为云OBS SDK,笔者编辑本文时,最小版本是OBS Java SDK 3.0.0 ,SDK安装过程如下:a.下载OBS Java SDK开发包。b. 在Eclipse中创建一个Java工程b. 将解压后的文件:esdk-obs-java-<versionId>.jar 以及third_party文件夹下所有的JAR包拷贝到您的项目中。c. 在Eclipse中选择您的工程,右击选择 Properties > Java Build Path > Add JARs。3、下载OBS的访问密钥key文件。a. 登陆华为云网站(www.huaweicloud.com),进入OBS控制台,下载访问密钥。密钥key是一个xxx.csv的表格文件,其中Access Key Id对应OBS API中的ak,Secret Access Key对应OBS API中的sk。密钥key的作用:通过网站访问对象存储OBS,需要先通过账号密码登陆网站。通过代码访问OBS,如果也需要输入账号密码,就会使得的代码变复杂。因此密钥key可以认为是经过加密的账号和密码,代码中可直接使用。 密钥key文件只在生成的时候提供下载,因此下载后需妥善保存。4、打开JDK包中的开发指南《对象存储Java SDK开发指南.doc》内含丰富的说明。操作步骤 1、在eclipse工程中左侧工具栏中找到自动生成的xxx.java,编写一个java类,输出欢迎语句。点击eclispe工具栏上的 调试或运行按钮,在结果中可看到欢迎语句。package main; import java.io.*;import java.io.IOException; public class main {public static void main(String[] args) {System.out.println("welcome to china!!!");}}2、创建一个OBS客户端。电脑是访问OBS的客户端,华为云的OBS是服务器。2.1 公有云的数据中心是分区域的,每个OBS访问地址都是通过“后缀endpoint”来指定数据是存放在哪个区域的数据中心的。“后缀endpoint”的查询地址:https://developer.huaweicloud.com/endpoint3.3 参考《对象存储服务Java SDK开发指南.doc》分别编辑创建OBS客户端、创建桶、上传对象和查看所有对象,具体代码参考后续完整代码。3.4 点击eclipse的调试或运行按钮,在控制台中显示创建桶成功,显示所有对象成功。控制台中提示日志插件和性能统计错误,不影响功能,可忽略不计。3.5 在华为云OBS 对象存储控制台中,可看到新增生成的桶和上传的文件。完整代码package main; import java.io.*;import java.io.IOException; import com.obs.services.ObsClient;import com.obs.services.exception.Ob**ception;import com.obs.services.model.*; public class main {/* 初始化OBS客户端所需的参数 */private static final String endPoint = "https://your endpoint";private static final String ak = "your ak";private static final String sk = "your sk";private static final String g_bucketName = "hello-obs-demo";private static final String g_bucketLoc = "cn-south-1"; public static void main(String[] args) {System.out.println("welcome to china!!!");/* 创建OBS客户端 */ObsClient obsClient = new ObsClient(ak,sk,endPoint);ObsBucket obsBucket;try {/* 创建一个桶 */obsBucket = createBucket(obsClient);/* 从本地笔记本上传文件到桶里面 */uploadFile(obsClient, obsBucket);/* 列举对象(文件)的信息 */listFile(obsClient,obsBucket);/* 关闭客户端 */}catch (Ob**ception e){System.out.println("main 函数出现错误!!!");}/* 关闭obs客户端 */closeObsClient(obsClient);}/* 创建一个桶 */private static ObsBucket createBucket(ObsClient obsClient) throws Ob**ception{ObsBucket obsBucket = new ObsBucket(g_bucketName,g_bucketLoc); obsClient.createBucket(obsBucket); System.out.println("Create bucket:" + g_bucketName + " successfully!"); return obsBucket;}/* 创建一个对象(文件) */private static void uploadFile(ObsClient obsClient, ObsBucket obsBucket) throws Ob**ception{File newfile = new File("C:\\Users\\xiaoniu\\Desktop\\temp\\hello.txt");obsClient.putObject(obsBucket.getBucketName(), "folder/", newfile);obsClient.putObject(obsBucket.getBucketName(), "hello1", newfile);obsClient.putObject(obsBucket.getBucketName(), "hello2", newfile);}/* 列举对象(文件)的信息 */private static void listFile(ObsClient obsClient, ObsBucket obsBucket) throws Ob**ception{System.out.println("开始测试桶里面的对象信息");ObjectListing objList = obsClient.listObjects(obsBucket.getBucketName());for (ObsObject obj : objList.getObjects()){System.out.println("--:"+obj.getObjectKey()+" (size=" + obj.getMetadata().getContentLength()+")");}}/* 关闭客户端 */private static void closeObsClient(ObsClient obsClient) {try{obsClient.close();}catch (IOException e){System.out.println("close obs client error.");}}}
-
本帖最后由 橘色祥云楼楼主 于 2017-11-13 17:23 编辑Q: ServiceComb和SpringCloud是什么关系,具体的应用场景是什么?A: ServiceComb是华为基于内部多个大型IT系统实践提炼出来的一套微服务开发框架,在开发态基于最佳实践封装了一套微服务运行模型,这些能力对用户完全透明,可以通过配置引入功能和对其进行调整。在运维阶段充分考虑了微服务运维,提供了丰富的监控指标和动态治理能力。 B: ServiceComb的这套能力可以作为一个单独的开发框架,在需要轻量级微服务解决方案的的场景中单独使用,也可以建立在SpringCloud上,与SpringCloud提供的其他组件一起工作,在重量级场景中和SpringCloud一起产生 “1+1大于2”的效果。Q: 用IntelliJ的免费版开发,有什么问题?A: 没有问题,使用IntelliJ 开发,可参考 Setup Developer Environment 进行相应的环境配置。Q: 使用Java-Chassis这个框架时有什么需要注意的地方?A: 使用Java-Chassis有以下这些限制: (1) 0.3.0-SNAPS**之前的版本不支持类似@GetMapping这样的标注。 (2) 所用到的HTTP请求方法一样时,如GET,则方法名不能重载。这是由于生成契约时方法名会作为其Operation ID,所以要保证其唯一性。 (3) 方法和类必须是public的。Q: 使用spring-boot-starter-provider这个依赖时,在application.yml文件中声明的spring.main.web-application属性并没有生效?A: 使用starter-provider这个依赖时,如果用到了servlet这种方式时,需要在application.properties这个文件引入spring.main.web-application=true这样的属性或者在application.yml文件中声明,但是此时需要新建一个application.properties的文件,其内容可以为空。Q: 网关依赖的jar和其他微服务的一样吗? <groupId>io.servicecomb</groupId> <artifactId>spring-boot-starter-provider</artifactId> CopyA: 网关除了要依赖spring-boot-starter-provider之外还要依赖spring-boot-starter-discovery,可以参考LinuxCon-Beijing-Workshop中manager的实现。Q: 网关需要像其他微服务一样配置assembly吗?其中的/maven/gateway这个路径是docker maven plugin默认的吗?A: 需要,由于项目现在使用的是spring-boot的打包方式,docker maven plugin也是依赖打包生成的文件来生成docker镜像的。/maven这个路径是docker maven plugin指定的,而gateway这个路径是在assembly中指定的。Q: 服务接口的返回类型可以是任意类型吗?还是必须是responseEntity?A: 可以,具体可以参考java-chassis的integration-test的实现。Q: 微服务启动后,无法正确调用接口,使用的代码为: @RestController @RestSchema(schemaId = "worker") public class WorkerController { @RequestMapping(value="/count", method=RequestMethod.GET) public int getWorkerNumbers() { ... } } CopyA: 在没有指明根路径的情况下,默认会使用类名作为其根路径,即上述代码中可访问的路径应为/WorkerController/count。如果想要实现/count这样的访问,则要指明根路径: @RequestMapping(value = "/") public class WorkerController {} CopyQ: 如果没有指定RequestMapping这个标注的value时,默认的基本路径是什么?A: 假设你的Controller类名为HelloController,那么基本路径就是/HelloController。Q: 在eclipse下修改了microservice.yaml配置文件下的端口号,启动程序后,端口号没生效?A: 需要单独导入sample项目,如果导入整个ServiceComb-Java-Chassis项目,由于sample目录不在ServiceComb-Java-Chassis模块中,IDE不会对sample进行编译,eclipse下并没有提示错误信息,IDEA下会有提示信息。因此eclipse启动sample的demo会发现修改了端口没有生效。Q: 如何自定义某个Java方法对应的REST接口里的HTTP Status Code?A: 对于正常的返回值,可以通过SwaggerAnnotation实现,例如: @ApiResponse(code = 300, response = String.class, message = "") public int test(int x) { return 100; } Copy对于异常的返回值,可以通过抛出自定义的InvocationException实现,例如:、 public String testException(int code) { String strCode = String.valueOf(code); switch (code) { case 200: return strCode; case 456: throw new InvocationException(code, strCode, strCode + " error"); case 556: throw new InvocationException(code, strCode, Arrays.asList(strCode + " error")); case 557: throw new InvocationException(code, strCode, Arrays.asList(Arrays.asList(strCode + " error"))); default: break; } return "not expected"; } CopyQ: 如何定制自己微服务的日志配置?A: ServiceComb不绑定日志器,只是使用了slf4j,用户可以自由选择log4j/log4j2/logback等等。ServiceComb提供了一个log4j的扩展,在标准log4j的基础上,支持log4j的properties文件的增量配置。默认以规则:”classpath*:config/log4j.properties”加载配置文件实际会搜索出classpath中所有的config/log4j.properties和config/log4j.*.properties, 从搜索出的文件中切出\*的部分,进行alpha排序,然后按顺序加载,最后合成的文件作为log4j的配置文件。如果要使用ServiceComb的log4j扩展,则需要调用Log4jUtils.init,否则完全按标准的日志器的规则使用。Q: 当服务配置了多个transport的时候,在运行时是怎么选择使用哪个transport的?A:ServiceComb的consumer、transport、handler、producer之间是解耦的,各功能之间通过契约定义联合在一起工作的,即: consumer使用透明rpc,还是springmvc开发与使用highway,还是RESTful在网络上传输没有关系与producer是使用透明rpc,还是jaxrs,或者是springmvc开发,也没有关系handler也不感知,业务开发方式以及传输方式consumer访问producer,在运行时的transport选择上,总规则为: consumer的transport与producer的endpoint取交集,如果交集后,还有多个transport可选择,则轮流使用分解开来,存在以下场景:当一个微服务producer同时开放了highway以及RESTful的endpointconsumer进程中只部署了highway transport jar,则只会访问producer的highway endpointconsumer进程中只部署了RESTful transport jar,则只会访问producer的RESTful endpointconsumer进程中,同时部署了highway和RESTful transport jar,则会轮流访问producer的highway、RESTful endpoint如果,此时consumer想固定使用某个transport访问producer,可以在consumer进程的microservice.yaml中配置,指定transport的名称: servicecomb: references: <service_name>: transport: highwayCopy当一个微服务producer只开放了highway的endpointconsumer进程只部署了highway transport jar,则正常使用highway访问consumer进程只部署了RESTful transport jar,则无法访问consumer进程同时部署了highway和RESTful transport jar,则正常使用highway访问当一个微服务producer只开放了RESTful的endpointconsumer进程只部署了highway transport jar,则无法访问consumer进程只部署了RESTful transport jar,则正常使用RESTful访问consumer进程同时部署了highway和RESTful transport jar,则正常使用RESTful访问
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签