1. Dubbo 是否支持 ZooKeeper 注册中心?
支持。配置 ZooKeeper 注册中心格式为:zookeeper://zkhost:zkport?backup=zk1host:zk1port,zk2host:zk2port
。
示例:zookeeper://127.0.0.1:2181
。
2. 如何使用 CSB SDK 命令行方式发送 POST 请求?
-
查看 SDK 命令行帮助信息
#java -jar http-client-1.1.5.2.jar
usage: java -jar http-client.jar [options...]
-method <arg> 请求类型, 默认 get, 可选的值为: get, post, cget 和 cpost
-url <arg> 测试:请求地址,例如: http://CSB服务地址:8086/CSB?p1=v1。CSB 服务地址即部署 CSB Broker 的 ECS 实例的 IP 地址。如果 Broker 部署了多个 ECS 实例,并绑定了 SLB,则 CSB 服务地址为 SLB 的地址。
-api <arg> 服务名
-version <arg> 服务版本
-ak <arg> accessKey, 可选
-sk <arg> secretKey, 可选
-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.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 请求示例
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 的方法定义如下:
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 服务地址即部署 CSB Broker 的 ECS 实例的 IP 地址。如果 Broker 部署了多个 ECS 实例,并绑定了 SLB,则 CSB 服务地址为 SLB 的地址。
.api("http2hsfDto") // 设置服务名
.version("1.0.0") // 设置版本号
.method("post") // 设置调用方式, get/post
.accessKey("ak值").secretKey("sk值"); // 设置accessKey 和 设置secretKey
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();
}
}
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 请求串的示例命令如下:
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 请求串的示例命令如下:
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 控制台上配置的所有服务入参。
注明:本文为星速云原创版权所有,禁止转载,一经发现将追究版权责任!