在您开始使用CSB时,可能会遇到一些问题。本文汇总了一些高频问题,帮忙您更顺畅的了解和体验CSB。

Dubbo是否支持ZooKeeper注册中心?

支持。配置ZooKeeper注册中心格式为zookeeper://zkhost:zkport?backup=zk1host:zk1port,zk2host:zk2port。例如zookeeper://127.0.0.1:2181

如何使用CSB SDK命令行发送POST请求?

  • 查看SDK命令行帮助信息

    #java -jar http-client-1.1.5.8.jar
    usage: java -jar http-client.jar [options...]
    -method <arg>                    请求类型, 默认get, 可选的值为: get, post, cget和cpost。
    -url <arg>                       测试:请求地址,例如http://CSB服务地址:8086/CSB?p1=v1。CSB服务地址即创建该实例时绑定的SLB的地址。
    -api <arg>                       服务名。
    -version <arg>                   服务版本。
    -ak <arg>                        AccessKey ID, 可选。
    -sk <arg>                        AccessKey Secret, 可选。
    -D <arg>                         请求参数, 格式: -D "key=value" 可以定义多个-D参数。
    -H <arg>                         HTTP Header, 格式: -H "key:value" 可以定义多个-H参数。
    -cbJSON <arg>                    以JSON串方式POST发送的请求body, 例如: -cbJSON "{'name':'wiseking'}"。
    -cc,--changeCharset              返回值是否需要转换charset。
    -h,--help                        打印帮助信息。
    -d,--debug                       打印调试信息。
    -nonce                           是否做nonce防重放处理,不定义为不做nonce重放处理。
    -proxy <arg>                     设置代理地址, 格式: proxy_hostname:proxy_port。
    -sdkv,--sdk-version              SDK版本信息。
    -sign,--signImpl <arg>           客户端签名类, 可选。
    -verify,--verifySignImpl <arg>   CSB服务端验签类, 可选。
                        
  • 发送POST的form请求示例

    java -jar http-sdk-1.1.5.8.jar -method post -url "https://CSB服务地址:8086/CSB" -api "服务名" -version "版本号" -ak "ak值" -sk "sk值"  -D "参数名1=参数值1" -D "参数名2=参数值2"                    
    说明 CSB服务地址即创建该实例时绑定的SLB的地址。
  • 发送POST的JSON请求示例

    java -jar http-sdk-1.1.5.8.jar -method post -url "http://CSB服务地址:8086/CSB" -api "服务名" -version "版本号" -ak "ak值" -sk "sk值" -cbJSON "{\"name\":\"name1\"}"                    
    说明 CSB服务地址即创建该实例时绑定的SLB的地址。

如何在Java代码中使用CSB SDK发送POST请求?

请参见SDK 使用说明。下一个问题中也有示例代码可以参考。

将后端HSF/Dubbo服务发布为RESTful服务时,HSF/Dubbo入参是必须要在CSB控制台上配置的吗?

是的。

HSF/Dubbo的入参顺序和类型,必须在CSB控制台上配置,且严格与HSF/Dubbo参数匹配。

例如,HSF的方法定义如下:

String echo(com.alibaba.csb.DemoDTO demoDTO, int count);            

其中DemoDTO定义如下:

class DemoDTO{
        java.lang.String name;
        java.lang.Integer age;
}          

则在CSB控制台上的参数定义如下:

路由发布服务-接入协议-参数配置

调用上述服务的Java示例代码如下:

public void testHttp2hsfDto() {
      HttpParameters.Builder builder = new HttpParameters.Builder();

      builder.requestURL("http://CSB服务地址:8086/CSB") // 设置请求的URL。其中,CSB服务地址即创建该实例时绑定的SLB的地址.
              .api("http2hsfDto") // 设置服务名。
              .version("1.0.0") // 设置版本号。
              .method("post") // 设置调用方式, get或post。
              .accessKey("ak值").secretKey("sk值"); // 设置AccessKey ID和AccessKey Secret。

      builder.putParamsMap("demoDTO", "{\"name\":\"name1\",\"age\":12}"); //DTO对象,以JSON方式传递。
      builder.putParamsMap("count", 2); 
      try {
          String ret = HttpCaller.invoke(builder.build());
          System.out.println("------- ret=" + ret);
      } catch (HttpCallerException e) {
          e.printStackTrace();
      }
  }           

什么场景下必须配置CSB服务参数?客户端应该使用form还是JSON发送请求?

服务出参是可选的,而服务入参配置和访问的规则如下:

对外开放协议 后端接入协议 入参配置 配置要求 CSB客户端访问要求
RESTful RESTful:form表单 可选 无。 HTTP GET或POST的form表单请求
RESTful RESTful:POST的application JSON 无需配置 如果配置入参,则必须为可选参数。 HTTP POST的application JSON请求
RESTful Dubbo 必须配置 参数类型和顺序必须与Dubbo服务方法入参定义严格匹配。 HTTP form表单请求
RESTful HSF 必须配置 参数类型和顺序必须与HSF服务方法入参定义严格匹配。 HTTP form表单请求
RESTful SOAP WebService 必须配置 参数类型和顺序必须与WS服务方法入参定义严格匹配。 HTTP form表单请求
WebService Dubbo 必须配置 参数类型和顺序必须与Dubbo服务方法入参定义严格匹配。
WebService HSF 必须配置 参数类型和顺序必须与HSF服务方法入参定义严格匹配。
WebService SOAP WebService 无需配置 无。

如何使用Postman等工具发送CSB服务请求?

由于需要对发送CSB的服务请求进行签名,故需要使用CSB SDK生成HTTP请求信息(HTTP Header、HTTP Body),然后再使用Postman等工具发送。

生成以HTTP GET方式发送CSB请求串的示例命令如下:

java -jar http-client-1.1.5.8.jar cget "http://CSB服务地址:8086/CSB?参数kv值" "CSB服务名" "CSB服务版本号" "访问凭证ak" "访问凭证sk"            
说明 CSB服务地址即创建该实例时绑定的SLB的地址。

生成以HTTP POST方式发送CSB请求串的示例命令如下:

java -jar http-client-1.1.5.8.jar cpost "http://CSB服务地址:8086/CSB?参数kv值" "CSB服务名" "CSB服务版本号" "访问凭证ak" "访问凭证sk" -D "参数1=参数值1"            
说明 CSB服务地址即创建该实例时绑定的SLB的地址。

如何让CSB对外开放的服务支持HTTPS?

假设CSB前面一定有负载均衡(如SLB或其它硬件负载均衡等),在此负载均衡上配置HTTPS监听即可。

服务访问报错“access permission deny”

  • 请确认使用的凭证AK值正确。
  • 请确认使用的凭证已订购指定服务,且服务拥有者审批通过。

服务访问报错“[503]service not registed”

通常有以下几种可能原因及解决办法:

原因 解决办法 说明
CSB的服务地址或端口不正确 使用正确的CSB服务地址和端口 CSB服务地址即部署CSB Broker的ECS实例的IP地址。如果Broker部署了多个ECS实例,并绑定了SLB,则CSB服务地址为SLB的地址。
CSB服务名错误 使用正确的CSB服务名 大小写敏感
CSB服务版本号错误 使用正确的服务版本号
服务刚发布 发布完成后,过1分钟后再试 服务发布后,需要最多1分钟延迟才能生效。

服务访问报错“required parameter is missing”

请确认发起的CSB服务调用的请求中,包含了CSB控制台上配置的所有服务入参。