常见问题

工具安装问题

1.当你安装安全插件完成后,按照 API 接口描述进行调用,无论如何返回失败

答:可能的原因如下:

  • 安全插件的服务器上下文路径配置错误,请检查配置文件中的server.tomcat.basedir, 修改API调用的访问服务路径或者修改server.tomcat.basedir配置项。

2.RocketMQ 没有启动成功

答:可能的原因如下:

  • runbroker.sh配置中的初始内存是否大于当前可用内存,需要运行free -m查看可用内存;请根据 RocketMQ部署 -> 环境检查 修改runbroker.shrunserver.sh中的内存相关配置,将最小内存修改为小于当前可用内存;

  • 运行脚本的当前目录是否正确,需要在rocketMQ路径下运行启动命令,而不是在bin目录下;请切换到rocketMQ目录下运行相应的启动脚本。

3.中间件没有成功启动,MongoDB 拒绝连接

答:可能的原因如下:

  • MongoDB 的端口的配置是否正确,默认是 27017; 请检查并修改中间件配置文件中mongodb的端口;

  • MongoDB 的配置文件/etc/mongod.conf文件配置了bind_ip,例如bind_ip127.0.0.1,导致只能通过127.0.0.1的 IP 访问,而中间件配置文件中填写的是 mongodb 所在服务器的内网 IP ;请修改/etc/mongod.conf配置文件,注释bind_ip配置。

技术问题

1.没有交易的时候,为什么区块链也在一直出块?

答:区块链是否出块来自底层链的设计理念。目前络谱采用的底层链方案通过出空块的方式来帮助用户判断一段时间内交易并没有发生,而不是断线了,或者系统故障了。这在确定性要求高的领域,例如金融系统是必备的功能特性。

2.中间件同步数据的机制是什么? 同步到本地的数据存放在哪里?

答:中间件从络谱区块链层拉取数据,由于区块链以 key-value 保存数据,只能根据区块id进行块内检索,无法根据业务字段查询。中间件为了实现对区块链上数据的结构化查询,对上链的数据维护了业务字段与区块链数据结构之间的对应索引,将结构化的业务数据保存在本地 MongoDB 数据库,同时也会把与用户有关的消息通过 MQ 推送给用户。

3.合作方开发业务系统中,如果发送交易成功了,开发过程中怎样确认交易是否已经成功写入到链上?(业务系统角度)

答:交易发送成功与写到区块链上为异步操作,您可通过以下几种方式确认是否已写入到链上:

  • 通过中间件接口查询,目前查询的是中间件同步数据库,需要确保中间件已完成数据同步。

  • 如果是写入或更新存证记录,可以在区块链浏览器,根据存证号(txHash)查找,若能查询到该笔交易,说明已上链。

  • 将来还会上线能够查询链上数据的中间件接口。

4.合作方开发业务系统中,如果发送交易成功了,开发过程中怎样确认交易是否已经成功写入到链上?(开发者角度)

4.1 收到存证号(txHash)是否可以确认交易执行成功?

答:是否收到存证号(txHash)不能代表交易已在区块链执行成功。业务系统收到存证号(txHash)仅能说明区块链的交易池已经收到了这笔交易,并给该笔交易定义一个唯一的存证号(txHash)。这笔交易是否能成功写入区块链,取决于区块链对该笔交易进行的后续处理。区块链接受交易到交易写入区块链是异步的操作。返回存证号(txHash)的交易,区块链处理过程中也有可能因合约执行错误导致交易失败。有时区块链处理繁忙时,会有未返回存证号(txHash)但交易最终发送成功的情况。

4.2 业务系统确认交易发送成功的流程?

答:业务系统调用中间件的发送交易接口,并监听中间件推送至消息队列中的块号事件和交易事件。通过blockLimit来判断交易有效的块范围,并通过发送交易的bizId从交易事件中筛选出该笔交易相关事件,从事件内容中获取交易的resultCode。如果resultCode为0则表明该笔交易执行成功;如果非0,则代表执行失败,并可以通过相应的resultCode进行错误排查。

4.3 怎么确认交易超时?

答:通过blockLimit来判断。blockLimit是交易的有效处理块号,在小于等于该块号内,交易都有可能被执行成功并写入区块链中。 例如第100块发送交易,在30块交易执行有效,blockLimit为130,则在131块开始才能算交易发送超时。在blockLimit范围内容(也就是100-130)内交易都有可能被执行,但一般情况下会在发送交易时刻的块号后的1-2块内会被处理。这取决于区块链当时的执行情况。

4.4 有哪些异常处理类型?

答:异常处理需要考虑两类。一类是调用接口是返回的异常,需要根据异常的内容进行处理。另一类是监听消息队列时,交易事件返回的交易执行失败的异常,一般这些异常都是合约异常,需要输出相应的错误日志,进行人工干预进行处理。

results matching ""

    No results matching ""