• 求助!java创建桶出现The location constraint is incompatible for the...
    public boolean createBucket() throws IOException {     obsClient = new ObsClient(ak, sk, endPoint);     // 创建桶     try{         // 创建桶成功         HeaderResponse response = obsClient.createBucket("firstbucket");         System.out.println(response.getRequestId());         return true;     }     catch (ObsException e)     {         // 创建桶失败         System.out.println("HTTP Code: " + e.getResponseCode());         System.out.println("Error Code:" + e.getErrorCode());         System.out.println("Error Message: " + e.getErrorMessage());         System.out.println("Request ID:" + e.getErrorRequestId());         System.out.println("Host ID:" + e.getErrorHostId());         return false;     } finally {         obsClient.close();     } }ak, sk, endPoint都是没错的,不知道为什么连接不上,测试结果如下HTTP Code: 400Error Code:IllegalLocationConstraintExceptionError Message: The  location constraint is incompatible for the region specific endpoint this request was sent to.Request ID:0000017208EA47DF920DA8829674D2DBHost ID:HmKupNVtqgLvkFicnTaJ2LANlSVV0odHMZh0AYj3rGtSU5vMp7TldJpBZeQNgz/b2020-05-12 20:44:31.341  INFO 21790 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
  • [调优工具] tuningKit JAVA工具看http连接时,为什么这里显示为0?
    如下图,有一个http的抓包信息,为啥平均请求次数和执行时间显示为0呢?
  • [调优工具] JAVA监控界面曲线GC和堆空间有连线情况,界面不太友好//转消费者OLC试用问题
    看下面图,在GC回收时间,堆也下降了,有点不太看,连在一起了,看看怎么优化一下
  • [调优工具] java线程gc监控曲线显示断线//转OLC客户试用问题
    当鼠标放上去以后,出现断线了,这个还是不太友好看看怎么优化一下。
  • [调优工具] JAVA 调优工具,安装参数说明不清楚用户不知道怎么填
    这几个参数到底是什么意思?  怎么还有个nigix?我们服务器上没有nigix不能用了吗 ?
  • [调优工具] tuning Kit JAVA版本文档问题
    如下文档中,安装java性能优化工具的服务器,具体是指哪个服务器?和下面的被调试的服务器不是一样的吗 ?还有为啥要求安装open JDK 11? 如果业务用的不是这个JDK版本,要重新安装吗,会不会对业务app有冲突?
  • [技术干货] 利用Java SDK开发OBS, 创建桶失败:IllegalLocationConstraintExceptio
    Response Code: 400Error Message: The  location constraint is incompatible for the region specific endpoint this request was sent to.Error Code:       IllegalLocationConstraintExceptionRequest ID:      00000171D44061F59011D81F3F8FC8AFHost ID:           gVNXYhZIxXzQmJYAuEry2vbWxP2mbdVkv5B4mJHidhajjxwhLnnvY73GmrbiYlq7
  • [问题求助] 服务器与物联网管理云平台对接的问题
    使用postman调试问题:是否需要证书,以及证书应该如何配置是不是在服务器端和云平台都要配(仅用于测试阶段)?在第一步获取accetoken 时,appId和secret信息从哪里获取,我在云平台上只找了APPId,以及是否需要内网穿透?我从华为下的文件JavaSDK中的一个文件中找到了appid和secret信息输入到postman上,并且试过用内网穿透和不使用内网穿透,安装上了华为给的postman的证书,但是postman依然收不到回复关于应用测java sdk的使用,是否需要使用其他工具(如maven),从华为下的JAVA SDK文件夹中里面的,应该使用哪些jar包?我直接使用myeclipse建了一个建了一个java工程,导入 JAVA SDK 中JAR包,然后使用指导书上步骤,获取accetoken,源代码没有错,但是编译出错?请问java sdk到底该如何使用,本人专业学的本来就是偏硬件,毕设给分到了这些偏软件的题,对java懂的也不多,有哪位大佬有时间可以给我指点一下吗? 有偿。 
  • [技术干货] JVM监控java.lang.management简介
        java.lang.management是JDK自带的一套工具库。通过工厂类ManagementFactory对外提供一套管理接口,提供JVM和JVM所运行操作系统的各种信息,例如:内存使用情况、GC情况和操作系统版本等。基于以上信息,可以辅助我们对定位问题或者性能调优提供数据支撑。Management同时允许从本地和远程(JMX)对正在运行的JVM进行监视和管理。MXBean简介      根据ManagementFactory的javadoc,可以看出它提供了大量的工厂方法,使得我们可以通过调用这些方法来获取JVM各组件相关的JavaBean,通过这些JavaBean就可以获取到对应组件的运行状态数据。而这些JavaBean是各个服务启动时自动注册好的,运行数据也是提前计算好的,所以我们并不会因为获取相关数据,而导致额外消耗资源进行计算。       这些JavaBean被称之为MBean或者MXBean。MBean和MXBean两者的区别在于:MXBean是一个特殊的MBean,它的数据类型被限制为开放类型,基本上是原始类型、字符串及其组合。由于这些限制,MXBean可以在不加载类的情况下使用,这使得它们甚至可以与非Java客户机进行互操作。这个特性对于我们进行通用封装是十分重要的。使用案例1:      JVM频繁的FullGC或者Java服务发生了OOM,但是JVM进程并没有自动退出。这种场景下,仅仅在操作系统层面对JVM进程进行监控是不能及时发现相关问题的。可以使用MemoryMXBean和GarbageCollectorMXBean来获取相关信息;并结合其他监控或者定时执行机制,实现告警等功能。实现代码:public class MemoryMXBeanTest {    private static volatile MemoryMXBean memoryMBean;    private static volatile List<GarbageCollectorMXBean> garbageCollectorMXBeanList;     /**     *  获取memoryMBean     */    private static void initMemoryMXBean() {        synchronized (MemoryMXBeanTest.class) {            if (memoryMBean == null) {                try {                    memoryMBean = AccessController.doPrivileged(                            new PrivilegedExceptionAction<MemoryMXBean>() {                                @Override                                public MemoryMXBean run() throws DrsException {                                    return ManagementFactory.getMemoryMXBean();                                }                            });                } catch (Exception exp) {                    log.error("", exp);                }            }        }    }     /**     * 获取GarbageCollectorMXBean     */    private static void initGarbageCollectorMXBean() {        synchronized (MemoryMXBeanTest.class) {            if (garbageCollectorMXBeanList == null) {                try {                    garbageCollectorMXBeanList = AccessController.doPrivileged(                            new PrivilegedExceptionAction<List<GarbageCollectorMXBean>>() {                                @Override                                public List<GarbageCollectorMXBean> run() throws DrsException {                                    return ManagementFactory.getGarbageCollectorMXBeans();                                }                            });                } catch (Exception exp) {                    log.error("", exp);                }            }        }    }     public static MemoryMXBean getMemoryMBean() {        if (memoryMBean == null) {            initMemoryMXBean();        }        return memoryMBean;    }     public static List<GarbageCollectorMXBean> getGCMXBeanList() {        if (garbageCollectorMXBeanList == null) {            initGarbageCollectorMXBean();        }        return garbageCollectorMXBeanList;    }     private Map<String, Object> getMemStatus() {        Map<String, Object> memStatus = new HashMap<String, Object>();        // 堆内存        memStatus.put("Heap mem Committed", getMemoryMBean().getHeapMemoryUsage().getCommitted());        memStatus.put("Heap mem Init", getMemoryMBean().getHeapMemoryUsage().getInit());        memStatus.put("Heap mem Max", getMemoryMBean().getHeapMemoryUsage().getMax());        memStatus.put("Heap mem Used", getMemoryMBean().getHeapMemoryUsage().getUsed());        // 堆内存使用率        memStatus.put("Heap mem Used Rato",                (getMemoryMBean().getHeapMemoryUsage().getUsed() * 100 / getMemoryMBean().getHeapMemoryUsage().getMax()) + "%");         // 堆外内存        memStatus.put("Non-Heap mem Committed", getMemoryMBean().getNonHeapMemoryUsage().getCommitted());        memStatus.put("Non-Heap mem Init", getMemoryMBean().getNonHeapMemoryUsage().getInit());        memStatus.put("Non-Heap mem Used", getMemoryMBean().getNonHeapMemoryUsage().getUsed());        return memStatus;    }     private Map<String, Object> getGcStatus() {        Map<String, Object> gcStatus = new HashMap<String, Object>();        if (!CollectionUtils.isEmpty(getGCMXBeanList())) {            // 不同的垃圾回收器            for (GarbageCollectorMXBean gcMXBean : getGCMXBeanList()) {                gcStatus.put(gcMXBean.getName() + "-" + Arrays.toString(gcMXBean.getMemoryPoolNames()) + "-count", gcMXBean.getCollectionCount());                gcStatus.put(gcMXBean.getName() + "-" + Arrays.toString(gcMXBean.getMemoryPoolNames()) + "-time", gcMXBean.getCollectionTime());            }        }        return gcStatus;    }     public void print() {        log.info("jvm mem status: {}", GsonUtils.toJson(getMemStatus()));         log.info("jvm gc status: {}", GsonUtils.toJson(getGcStatus()));    } }运行结果:2020-03-09 08:24:30,001 jvm mem status: {"Non-Heap mem Used":201168408,"Heap mem Used":710231248,"Heap mem Used Rato":"48%","Heap mem Committed":1467482112,"Non-Heap mem Init":2555904,"Non-Heap mem Committed":207945728,"Heap mem Init":1474297856,"Heap mem Max":1467482112}2020-03-09 08:24:30,001 jvm gc status: {"PS Scavenge-[PS Eden Space, PS Survivor Space]-count":210,"PS MarkSweep-[PS Eden Space, PS Survivor Space, PS Old Gen]-time":842,"PS MarkSweep-[PS Eden Space, PS Survivor Space, PS Old Gen]-count":4,"PS Scavenge-[PS Eden Space, PS Survivor Space]-time":2213}使用案例2      有业务功能大量并发,同时占用了大量数据库连接;从而导致连接池中可用连接长时间无空闲的话,就会导致业务持久化操作异常。下面就以使用Druid数据库连接池为例,通过Druid自带的MXbean获取连接池相关信息。PS:      1、多数Java连接池都会注册MXbean并记录重要监控数据,具体实现和数据线略有差别;      2、druid自带monitor;需要配置额外的数据库进行存储,可参见:https://github.com/alibaba/druid/wiki/druid-monitor%E8%AE%BE%E8%AE%A1      通过JMX连接JVM,可以看到DruidDataSource下有两个数据源,他们的ObjectName为:com.alibaba.druid:type=DruidDataSource,id=XXX,每个数据源的MXBean中各有一组Attribute记录相关监控项。实现代码:public class DruidMXBeanTest {     private static volatile MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();     private static void initMBeanServer() {        synchronized (DruidMXBeanTest.class) {            if (mBeanServer == null) {                try {                    mBeanServer = AccessController.doPrivileged(                            new PrivilegedExceptionAction<MBeanServer>() {                                @Override                                public MBeanServer run() throws DrsException {                                    return ManagementFactory.getPlatformMBeanServer();                                }                            });                } catch (Exception exp) {                    log.error("", exp);                }            }        }    }     private static MBeanServer getMBeanServer() {        if (mBeanServer == null) {            initMBeanServer();        }        return mBeanServer;    }     public static Set<ObjectInstance> queryMBeans(String objectName) {        try {            if (getMBeanServer() != null) {                return getMBeanServer().queryMBeans(new ObjectName(objectName), null);            }        } catch (Exception e) {            log.error("", e);        }        return null;    }     public static Map<String, Object> getAttributes(String objectName, List<String> attrNameList) {        try {            return getAttributes(new ObjectName(objectName), attrNameList);        } catch (Exception e) {            log.error("", e);        }        return null;    }     public static Map<String, Object> getAttributes(ObjectName objectName, List<String> attrNameList) {        Map<String, Object> result = new HashMap<String, Object>();        if (CollectionUtils.isEmpty(attrNameList) || getMBeanServer() == null) {            return result;        }        try {            AttributeList attributeList = getMBeanServer().getAttributes(objectName, attrNameList.toArray(new String[] {}));            for (int i = 0; i < attrNameList.size(); i++) {                result.put(attrNameList.get(i), i < attributeList.size() ? ((Attribute) attributeList.get(i)).getValue() : "");            }            return result;        } catch (Exception e) {            log.error("", e);        }        return result;    }     private Map<String, Map<String, Object>> getDruidDataSourceStatus() {        Map<String, Map<String, Object>> druidDataSourceMap = new HashMap<String, Map<String, Object>>();        try {            // 结果数量不固定并且ID每次随机,使用带通配符的ObjectName进行批量查询            Set<ObjectInstance> druidDataSourceSet = queryMBeans("com.alibaba.druid:type=DruidDataSource,id=*");            if (druidDataSourceSet != null) {                 // 一个数据源一组attribute                druidDataSourceSet.stream().forEach(objectInstance -> {                    Map<String, Object> druidDataSource = new HashMap<String, Object>();                     /**                     * 需要获取到的监控项                     *                      * druid更多相关监控项可以在com.alibaba.druid.pool.DruidDataSource中查看(注意使用时需要大写驼峰格式)                     */                    List<String> attrList = new ArrayList<String>() {                        {                            // 数据源用户名                            add("Username");                            // 最大连接池数量                            add("MaxActive");                            // 最小连接池数量                            add("MinIdle");                            // 连接池中空闲连接数                            add("PoolingCount");                            // 连接池中正在使用的连接数                            add("ActiveCount");                        }                    };                    druidDataSource = getAttributes(objectInstance.getObjectName(), attrList);                    druidDataSourceMap.put(String.valueOf(druidDataSource.get("Username")), druidDataSource);                });            }         } catch (Exception e) {            log.error("", e);        }        return druidDataSourceMap;    }     public void print() {        log.info("druid dataSource status: {}", GsonUtils.toJson(getDruidDataSourceStatus()));    }} 运行结果:2020-03-09 08:24:30,002 druid dataSource status: {"db1":{"Username":"db1","MaxActive":20,"MinIdle":5,"ActiveCount":0,"PoolingCount":5},"db2":{"Username":"db2","MaxActive":20,"MinIdle":10,"ActiveCount":1,"PoolingCount":9}}  总结很多开源中间件都会使用Management方式进行自定义扩展,记录相关运行状况数据;例如Kafka、logback等,都可以使用类似方式获取数据。参考资料:https://www.jianshu.com/p/5d854245051dhttps://baike.baidu.com/item/java.lang.management/5179868?fr=aladdinhttp://www.voidcn.com/article/p-cwctaeex-bsq.htmlhttps://zimt8.com/questions/16275207/https://docs.oracle.com/javase/tutorial/jmx/mbeans/mxbeans.htmlhttps://docs.oracle.com/javase/8/docs/api/java/lang/management/package-summary.html
  • 使用Java访问得到301,并且无法redirect
    listFile方法得到异常:com.obs.services.internal.ServiceException: Try to redirect, but location is null!,经过检查,发现服务端返回301,并且header中没有location,得到这个错误的概率大概是30%,请问如何解决呢
  • [分享交流] java 调用smc2.0 调用到认证接口的时候 lineNumber: 1; columnNumber: 1; 文件提前结
    问题   调用 Authenticate方法返回上面的信息  是什么原因  登录方法已经拿到了cookie    问题2  二次SHA256加密的   密码  是什么   问题3  放入cookie  是httpHeaders.put("Set-Cookie",Cookie);   Set-Cookie 还是cookie  
  • [技术干货] ServiceComb CSE Java Chassis 启动失败
    # ServiceComb CSE Java Chassis 启动失败 > 初次使用 **ServiceComb Java Chassis** 框架 启动的时候总是发生报错. ### content held by this instance and the service center is different ![start_error_1.PNG](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/10/0041220fhd2ru6cr7ponjc.png) 这个问题一般是对 服务端 **接口** 进行了修改, 造成生成的 **契约** 发生了变化. 有以下处理方式: * 直接升级服务版本号, 修改 **microservice.yaml** 配置文件配置 **service_description.version** , 增加一个小的版本号就好, 例如从 **0.0.1** 升级为 **0.0.2** ![start_error_2.PNG](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/10/004138n1whaygnzdqp0ooo.png) * 也可以直接到 **服务中心** , 删除 同版本老的 契约 ![start_error_3.PNG](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/10/0041554pjawdaii0ykq67c.png) * 如果既不想升级版本号, 也不想去服务中心删除契约,可以设置 变量 **service_description.environment** 为 **development** ![start_error_4.PNG](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/10/004210xltehhhf7xbrdk6m.png) > 如果是生产环境, 确定啥都没改, 就是重启了下实例, 发现报了这个错误. 可以参考帖子 https://bbs.huaweicloud.com/forum/thread-12624-1-1.html ### 服务启动成功, 但是服务中心没找到实例. * 全局搜索关键词 `running microservice register task` 或者 `running microservice instance register task` > 如果找不到, 确定是否配置了 **local.registry.file** . 该参数控制是否使用 **本地服务中心**, 如果这个参数不为空, 就会使用本地服务中心, 而不会往远端服务中心注册. > > 如果有相关注册日志, 可以接着往下排查: * 确定 **servicecomb.service.registry.address** 是否配置的 是目标服务中心 * 确定 服务中心 的 **选中的环境** 是否 和 本服务配置 **service_description.environment** 保持一致. ![start_error_5.PNG](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/10/004343pzao1vuseqydj3lg.png) ## Connection timed out > 这里要注意下, 连接配置中心 连接不上也有可能报 **Connection timed out** , 但是配置中心连接失败 不影响服务 启动 和 服务注册. > 看日志要看的细致一点, 如果同行 还有 **registry** 关键字, 那就是 注册的时候发生了 **超时** 注册时 发生超时, 要自己检查 本机 和 服务中心 **是否是连通的** . 如果你说你本地 能 **curl** 同 服务中心, 但是程序确实连不上, 请检查自己代理和网络. > 如何在ServiceComb 配置代理可参考 : https://docs.servicecomb.io/java-chassis/zh_CN/general-development/dai-li-she-zhi/#_1 > > 一般不需要主动配置代理, 程序直接使用系统代理就没问题. 反正我没主动配置过. **连接超时问题, 不要找 ServiceComb 开发人员支撑, ServiceComb 开发不懂网络** ## Must be a concrete type 服务启动失败,报错"[simple type, class xxx] is interface. Must be a concrete type". 详情可查看帖子: https://bbs.huaweicloud.com/forum/thread-50505-1-1.html 报错日志: ```log Exception in thread "main" java.lang.IllegalStateException: ServiceComb init failed. at org.apache.servicecomb.core.SCBEngine.init(SCBEngine.java:231) at org.apache.servicecomb.core.CseApplicationListener.onApplicationEvent(CseApplicationListener.java:81) at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:393) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:347) at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:883) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93) at org.apache.servicecomb.foundation.common.utils.BeanUtils.init(BeanUtils.java:54) at org.apache.servicecomb.foundation.common.utils.BeanUtils.init(BeanUtils.java:47) at mylearning.servicecomb.ServiceCombConsumerMain.main(ServiceCombConsumerMain.java:23) Caused by: java.lang.Error: generate operation swagger failed, mylearning.servicecomb.service.ThirdPartyService:thirdSayHello at org.apache.servicecomb.swagger.generator.core.SwaggerGenerator.scanMethods(SwaggerGenerator.java:252) at org.apache.servicecomb.swagger.generator.core.SwaggerGenerator.generate(SwaggerGenerator.java:141) at org.apache.servicecomb.core.definition.schema.AbstractSchemaFactory.generateSwagger(AbstractSchemaFactory.java:102) at org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory.createSchema(ProducerSchemaFactory.java:115) at org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory.createSchema(ProducerSchemaFactory.java:54) at org.apache.servicecomb.core.definition.schema.AbstractSchemaFactory.getOrCreateSchema(AbstractSchemaFactory.java:58) at org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory.getOrCreateProducerSchema(ProducerSchemaFactory.java:76) at org.apache.servicecomb.provider.rest.common.RestProducerProvider.init(RestProducerProvider.java:45) at org.apache.servicecomb.core.provider.producer.ProducerProviderManager.init(ProducerProviderManager.java:54) at org.apache.servicecomb.core.SCBEngine.doInit(SCBEngine.java:264) at org.apache.servicecomb.core.SCBEngine.init(SCBEngine.java:219) ... 13 more Caused by: org.apache.servicecomb.foundation.common.exceptions.ServiceCombException: [simple type, class javax.servlet.http.HttpServletResponse] is interface. Must be a concrete type. at org.apache.servicecomb.swagger.extend.ModelResolverExt.checkType(ModelResolverExt.java:119) at org.apache.servicecomb.swagger.extend.ModelResolverExt.resolveProperty(ModelResolverExt.java:151) at io.swagger.jackson.ModelResolver.resolveProperty(ModelResolver.java:125) at io.swagger.converter.ModelConverterContextImpl.resolveProperty(ModelConverterContextImpl.java:83) at io.swagger.converter.ModelConverters.readAsProperty(ModelConverters.java:63) at io.swagger.converter.ModelConverters.readAsProperty(ModelConverters.java:57) at org.apache.servicecomb.swagger.generator.springmvc.processor.parameter.SpringmvcDefaultParameterProcessor.process(SpringmvcDefaultParameterProcessor.java:39) at org.apache.servicecomb.swagger.generator.core.OperationGenerator.scanMethodParameters(OperationGenerator.java:298) at org.apache.servicecomb.swagger.generator.core.OperationGenerator.generate(OperationGenerator.java:181) at org.apache.servicecomb.swagger.generator.core.SwaggerGenerator.scanMethods(SwaggerGenerator.java:248) ... 23 more ``` > 服务报这个错误是由于在接口定义中使用了接口类型的参数。如下面的代码,接口中使用了`HttpServletResponse`。 ```java @RequestMapping(path = "/thirdSayHello", method = RequestMethod.GET) public String thirdSayHello(@RequestParam(name = "name") String name, HttpServletResponse HttpServletResponse) { // invoke 3rd party rest service String response = commonServerIntf.sayHello(name); LOGGER.info("name: {}.", response); return response; } ``` > ServiceComb关于接口定义和数据类型的支持可参考开发者指导[接口定义和数据类型](https://docs.servicecomb.io/java-chassis/zh_CN/build-provider/interface-constraints/)
  • [技术干货] ServiceComb Java Chassis CSE SDK 报错 Connection Refused
    # ServiceComb Java Chassis CSE SDK 报错 Connection Refused > 查看服务的运行日志, 会发现运行是报错 **Connection Refused** ![conn_refused_1.png](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/08/09344356pgdgiywycm3ksj.png) 发送连接, 连接被拒绝, 这种通常是发送请求的时候 服务端实例 **不可用** 了. 一般是发生在如下场景: 1. 服务上下线和升级, 造成实例重启. 在重启期间 会短暂有这种报错 2. 服务实例运行期间, 实例发生重启, 也会造成这种报错. > 发生这种报错, CSE 只有以上简单建议, 无法帮助客户 debug 看日志排查问题. 如果客户可以抽出demo 复现问题, 可以找CSE 支撑人员排查
  • [技术干货] ServiceComb Java SDK 直接调用RPC 服务端
    # RPC Server 端支持使用 POSTMAN 直接调用 > 如果服务端 是使用 Java Chassis **RPC 风格开发的**, 如果想是用 `postman` 等工具直接调用时, 需要根据 swagger 契约查找 调用路径 ### 示例 ```java @RpcSchema(schemaId = "test") @SwaggerDefinition(basePath = "/pojo/rest") public class CodeFirstPojo { public Person sayHello(Person user) { user.setName("hello " + user.getName()); return user; } public String sayHi(String name) { return "hello " + name; } } ``` ### POSTMAN 调用 要想知道调用路径, 需要查看 **契约**. > 契约可以在 `日志` 中查看, 也可以在 `服务中心` 中查找. ```yaml swagger: "2.0" info: version: "1.0.0" title: "swagger definition for org.apache.servicecomb.demo.pojo.server.CodeFirstPojo" x-java-interface: "gen.swagger.CodeFirstPojoIntf" basePath: "/pojo/rest" schemes: - "http" consumes: - "application/json" produces: - "application/json" paths: /sayHello: post: operationId: "sayHello" parameters: - in: "body" name: "user" required: false schema: $ref: "#/definitions/Person" responses: "200": description: "response of 200" schema: $ref: "#/definitions/Person" /sayHi: post: operationId: "sayHi" parameters: - in: "body" name: "name" required: false schema: $ref: "#/definitions/sayHiBody" responses: "200": description: "response of 200" schema: type: "string" definitions: Person: type: "object" properties: name: type: "string" x-java-class: "org.apache.servicecomb.demo.compute.Person" sayHiBody: type: "object" properties: name: type: "string" ``` > 根据 `basePath` 和 `path` 进行拼接. 例如 我想调用 **sayHi()** 请求路径是 `/pojo/rest/sayHi` , 调用方法是 `post` ![rpc_1.PNG](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/07/224719zyb4ccgyo9m5ki5m.png) ![rpc_2.PNG](https://bbs-img-cbc-cn.obs.cn-north-1.myhuaweicloud.com/data/attachment/forum/202004/07/224729b3tkutusxtruwtln.png)
  • [技术干货] ServiceComb Java Chassis 自定义 Handler 链参数传递
    ServiceComb 官方文档地址 https://docs.servicecomb.io/java-chassis/zh_CN/question-and-answer/question_answer/详情在 二 楼
总条数:2301 到第 页
上滑加载中