servicecall_java_sdk - catyguan/sad GitHub Wiki
SDK采用Maven进行包管理
- bma.servicecall-core-1.0.0 -- 业务核心代码包。无其他包的依赖
- bma.servicecall-boot-1.0.0 -- 服务整合和启动的相关代码包
- 依赖core
- 依赖spring-context
- bma.servicecall-httpclient-1.0.0 -- HTTP通信协议的客户端代码包
- 依赖core
- 依赖jackson
- 依赖httpcomponents-httpclient
- bma.servicecall-httpserver-1.0.0 -- HTTP通信协议的服务端代码包
- 依赖core
- 依赖boot
- 依赖jackson
- 依赖netty
- bma.servicecall-sockclient-1.0.0 -- SOCKET通信协议的客户端代码包
- 依赖core
- 依赖sockcore
- bma.servicecall-sockcore-1.0.0 -- SOCKET通信协议的编码代码包
- 依赖core
- bma.servicecall-sockserver-1.0.0 -- SOCKET通信协议的编码代码包
- 依赖core
- 依赖boot
- 依赖sockcore
- 依赖netty
傻瓜式:可以直接使用bma.servicecall-all-1.0.0,包含全部包
纯开发:不需要考虑实际部署的话,只需要使用bma.servicecall-core-1.0.0
客户端:根据需要支持的不同通信协议,使用bma.servicecall-httpclient-1.0.0或bma.servicecall-sockclient-1.0.0
服务端:根据部署支持的不同通信协议,使用bma.servicecall-httpserver-1.0.0或bma.servicecall-sockserver-1.0.0
可采用以下初次化代码设置输出调试信息到JDK的Logger体系
Debuger.init(new JDKLogger("test"));
如果需要采用其他的调试信息输出方法,只需要实现bma.servicecall.core.ServiceCallLogger接口即可
构建Manager
Manager m = new Manager();
Manager可以采用Singleton模式
调用前新建Client对象
Client cl = manager.createClient();
try {
...
} finally {
cl.close();
}
Client对象不建议重用
调用时候构建地址对象Address,请求对象Request和上下文对象Context,设置参数和设置
Address addr = new Address()
addr.setType("http");
addr.setApi("http://localhost:1080/test/hello");
Request req = new Request();
req.put("word", word);
...
Context ctx = new Context();
...
调用,获取应答和响应数据
Answer answer = cl.invoke(addr, req, ctx);
answer.checkError();
if (answer.isDone()) {
ValueMap rs = answer.sureResult();
String data = rs.getString("Data");
...
}
构造TestDriver并设置具体期望返回的Answer进行测试
TestDriver driver = new TestDriver();
driver.initDriver("http");
Answer answer = new Answer();
driver.addAnswer(answer);
...
cl.invoke(addr, req, ctx);
实现服务对象
public class SMHello implements ServiceMethod {
@Override
public void execute(ServicePeer peer, Request reqest, Context context) {
...
}
}
使用request和context获取参数和选项
String word = req.getString("word");
String who = context.getString("who");
构造Answer对象并使用peer进行响应
Answer a = new Answer();
a.setStatus(StatusConst.DONE);
a.sureResult().put("Data", r);
peer.writeAnswer(a, null);
构造TestServicePeer(空实现)进行测试
TestServicePeer peer = new TestServicePeer();
ServiceRequest request = new ServiceRequest();
request.put("word", "Hello Kitty");
Context context = new Context();
...
SMHello method = new SMHello();
method.execute(peer, request, context);
ServiceMux mux = new ServiceMux();
mux.setServiceMethod("test", "hello", new SMHello());
...
ServiceCallSocketServer server = new ServiceCallSocketServer();
server.setServiceMux(mux);
server.setPort(1080);
server.setExecutors(10);
server.startServer();
try {
Thread.sleep(60 * 1000);
} finally {
server.stopServer();
}
spring的配置xml
<bean id="serviceCallMux" class="bma.servicecall.core.ServiceMux">
<property name="serviceMethods">
<map>
<entry key="test:hello" value-ref="SMHello" />
</map>
</property>
</bean>
...
<bean id="server" class="bma.servicecall.sockserver.ServiceCallSocketServer"
destroy-method="close">
<property name="port" value="1080" />
<property name="executors" value="10" />
<property name="serviceMux" ref="serviceCallMux" />
</bean>
...
<bean id="booter" class="bma.servicecall.boot.SimpleServerBooter">
<property name="main" ref="server"/>
</bean>
使用boot包的bma.servicecall.boot.ServerBoot对象启动