商业广告数据构造-scf层

最近有时间用java写了点数据构造的东西(当然也是模仿别人写的,调用服务不同,模子都是大同小异),这里数据构造都是tcp层的(下面简称scf-这个是58这边基于tcp改造了一下),没有使用http原因是因为接口会有很多限制。比如说cookie啥的,也不是很方便,不如直接调用研发写好的scf服务,直接构造数据,也方便熟悉研发代码。

背景:我这次写的注册流程,因为目前是商户端所以会和平台的user表的主键id建立映射关系。

流程如下:bizuserid和userid建立映射关系->完善商户资料->提交资质->审核通过。所以整体分成4步,也就是分别调用对应服务中暴露出来的接口。

数据构造我理解其实就是把rd暴露出来的scf接口,拼装请求数据,请求对应接口完成数据写入数据库。跟http的post/get请求其实没有本质区别。或者说任何接口测试都可以分成3步:构造请求数据->请求接口->校验结果,因为是数据构造所以说就不存在校验结果。

1.建立连接:

首先会有一个ScfHelper类,用于建立服务tcp链接。我理解tcp((ip,port),(ip,port)),首先是请求服务器ip+端口号,接收方服务器ip+端口号。后面就是/bizuser表示集群名称,/BizUserService表示服务名称。

通过ProxyFactory.create()方法来建立连接,我没有看这个具体实现,所以我猜测应该是会从本地的scf.conf文件来查找Service name这标签查找bizuser来匹配,通过host,port对应的值来连建立和服务器的链接。

ps:ScfHelper类中书写公共方法->查找本地scf.cong文件对应服务的标签->通过host和port的值来建立和服务起的连接。

第一次遇到一个坑就是后面服务名称写错了,造成找不到这个方法(肯定没有啊,因为都没这个服务)。当你发现你无法调用服务首先查看登录服务器查看error日志,如果发现这种找不到方法的错误,两方面:1.tcp连接服务名称写错根本没有这个服务。2.这个方法不在这个服务里面。

2.

整体和http请求一样,根据方法构造请求内容->请求scf接口->封装返回结果,这个请求参数比较简单是一个Long型的即可,后面我在举例一个实体的。这里面有一个logstr,这个是在请求多个服务的时候这个logstr会一直透传方便定位问题,根据logstr的logid去各个集群去查找日志。因为每次调用都要穿logstr比较麻烦,所以我们吧这个方法又封装一个,这样wf层请求调用该方法就不需要穿logid了。

运行结果如下:

数据库结果:

下面就是调用update结果吧其他字段填充,就是上面说参数传入一个实体,如图:

被调用接口

userDTO还应该传入bizuser表的主键id,因为要拼装需要根据creatUser方法来获取bizuserid所以这里面就添加可以固定的属性。

上面就是createbizuser把模块组装封装了一个方法。打印结果如下:

数据库结果:

猜你喜欢

转载自blog.csdn.net/gogoboi_jin/article/details/82689556