• [行业前沿] 【ServiceComb最全 FAQ】 42个常见问题 大集锦1
    本帖最后由 橘色祥云楼楼主 于 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访问
总条数:144 到第
上滑加载中