全部产品
云市场

常见问题

更新时间:2019-10-09 21:19:55

1. Dubbo 是否支持 ZooKeeper 注册中心?

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

2. 如何使用 CSB SDK 命令行方式发送 POST 请求?

  • 查看 SDK 命令行帮助信息

    1. #java -jar http-client-1.1.5.2.jar
    2. usage: java -jar http-client.jar [options...]
    3. -method <arg> 请求类型, 默认 get, 可选的值为: get, post, cget cpost
    4. -url <arg> 测试:请求地址,例如: http://CSB服务地址:8086/CSB?p1=v1。CSB 服务地址即部署 CSB Broker 的 ECS 实例的 IP 地址。如果 Broker 部署了多个 ECS 实例,并绑定了 SLB,则 CSB 服务地址为 SLB 的地址。
    5. -api <arg> 服务名
    6. -version <arg> 服务版本
    7. -ak <arg> accessKey, 可选
    8. -sk <arg> secretKey, 可选
    9. -D <arg> 请求参数, 格式: -D "key=value" 可以定义多个-D参数
    10. -H <arg> HTTP Header, 格式: -H "key:value" 可以定义多个-H参数
    11. -cbJSON <arg> JSON 串方式 POST 发送的请求body, 例如: -cbJSON "{'name':'wiseking'}"
    12. -cc,--changeCharset 返回值是否需要转换charset
    13. -h,--help 打印帮助信息
    14. -d,--debug 打印调试信息
    15. -nonce 是否做 nonce 防重放处理,不定义为不做nonce重放处理
    16. -proxy <arg> 设置代理地址, 格式: proxy_hostname:proxy_port
    17. -sdkv,--sdk-version SDK 版本信息
    18. -sign,--signImpl <arg> 客户端签名类, 可选
    19. -verify,--verifySignImpl <arg> CSB 服务端验签类, 可选
  • 发送 POST 的 form 请求示例

    1. java -jar http-sdk-1.1.5.2.jar -method post -url "https://CSB服务地址:8086/CSB" -api "服务名" -version "版本号" -ak "ak值" -sk "sk值" -D "参数名1=参数值1" -D "参数名2=参数值2"

    说明:CSB 服务地址即部署 CSB Broker 的 ECS 实例的 IP 地址。如果 Broker 部署了多个 ECS 实例,并绑定了 SLB,则 CSB 服务地址为 SLB 的地址。

  • 发送 POST 的 JSON 请求示例

    1. java -jar http-sdk-1.1.5.2.jar -method post -url "http://CSB服务地址:8086/CSB" -api "服务名" -version "版本号" -ak "ak值" -sk "sk值" -cbJSON "{\"name\":\"name1\"}"

    说明:CSB 服务地址即部署 CSB Broker 的 ECS 实例的 IP 地址。如果 Broker 部署了多个 ECS 实例,并绑定了 SLB,则 CSB 服务地址为 SLB 的地址。

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

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

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

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

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

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

其中 DemoDTO 定义如下:

  1. class DemoDTO{
  2. java.lang.String name;
  3. java.lang.Integer age;
  4. }

那么在 CSB 控制台上的参数定义将如下所示:

接入协议-demoDTO

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

  1. public void testHttp2hsfDto() {
  2. HttpParameters.Builder builder = new HttpParameters.Builder();
  3. builder.requestURL("http://CSB服务地址:8086/CSB") // 设置请求的URL。其中,CSB 服务地址即部署 CSB Broker 的 ECS 实例的 IP 地址。如果 Broker 部署了多个 ECS 实例,并绑定了 SLB,则 CSB 服务地址为 SLB 的地址。
  4. .api("http2hsfDto") // 设置服务名
  5. .version("1.0.0") // 设置版本号
  6. .method("post") // 设置调用方式, get/post
  7. .accessKey("ak值").secretKey("sk值"); // 设置accessKey 和 设置secretKey
  8. builder.putParamsMap("demoDTO", "{\"name\":\"name1\",\"age\":12}"); //DTO对象,以json方式传递
  9. builder.putParamsMap("count", 2);
  10. try {
  11. String ret = HttpCaller.invoke(builder.build());
  12. System.out.println("------- ret=" + ret);
  13. } catch (HttpCallerException e) {
  14. e.printStackTrace();
  15. }
  16. }

5. 什么场景下必须配置 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 WS 必须配置 参数类型和顺序必须与 WS 服务方法入参定义严格匹配 HTTP form 表单请求
WS Dubbo 必须配置 参数类型和顺序必须与 Dubbo 服务方法入参定义严格匹配
WS HSF 必须配置 参数类型和顺序必须与 HSF 服务方法入参定义严格匹配
WS SOAP WS 无需配置

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

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

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

  1. java -jar http-client-1.1.5.2.jar cget "http://CSB服务地址:8086/CSB?参数kv值" "CSB服务名" "CSB服务版本号" "访问凭证ak" "访问凭证sk"

说明:CSB 服务地址即部署 CSB Broker 的 ECS 实例的 IP 地址。如果 Broker 部署了多个 ECS 实例,并绑定了 SLB,则 CSB 服务地址为 SLB 的地址。

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

  1. java -jar http-client-1.1.5.2.jar cpost "http://CSB服务地址:8086/CSB?参数kv值" "CSB服务名" "CSB服务版本号" "访问凭证ak" "访问凭证sk" -D "参数1=参数值1"

说明:CSB 服务地址即部署 CSB Broker 的 ECS 实例的 IP 地址。如果 Broker 部署了多个 ECS 实例,并绑定了 SLB,则 CSB 服务地址为 SLB 的地址。

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

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

8. 服务访问报错“access permission deny”

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

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

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

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

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

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