开发者社区> 问答> 正文

错误编码:HSF-0029是什么,如何解决?

错误编码:HSF-0029是什么,如何解决?

展开
收起
保持可爱mmm 2020-03-28 22:29:00 789 0
1 条回答
写回答
取消 提交回答
  • 报错信息 There is no TOP transformer for Service:[${serviceUniqueName}]. 解决方案 TOP 调用在服务端进行转换时,没有找到对应的 transformer。故在服务端初始化时,请通过 com.taobao.hsf.ServiceInvokeTransform.Helper#register 注册一个 transformer。 TOP 调用方式 TOP 调用方式 TOP 方式是为了避免网关应用依赖后端服务的 API 包。 客户端 客户端使用 com.taobao.hsf.app.spring.util.SuperHSFSpringConsumerBeanTop,该类无需服务端的接口包。 通过 com.taobao.hsf.app.spring.util.SuperHSFSpringConsumerBeanTop#invoke 发起调用。

    /** * TOP调用该方法来访问远程HSF服务。 *

    * 这里需要注意的是parameterTypes参数,该参数表示要调用的方法的参数类型。 必须是完整的JAVA类名,而且如果参数是原子类型,这里的类型就是原子类型的名称。 *

    * * @return 对端业务响应或业务异常 * * @throws HSFException * 如果本侧或对端HSF层出现错误,则抛出HSFException * @throws Throwable * 如果服务端业务出现异常,则抛出Exception */ public Object invoke(String methodName, String[] parameterTypes, Object[] args) throws HSFException, Throwable { return consumerBeanTop.invoke(methodName, parameterTypes, args); }

    这里的 args 不是真正的服务端业务类型。 服务端 服务端初始化时,需要通过 com.taobao.hsf.ServiceInvokeTransform.Helper#register 注册一个 transformer。

    /** * 用于把服务的调用参数转换成服务可以接受的形式。 * * @param methodName * 要调用的服务方法名 * @param args * 转换前的调用参数 * @param parameterTypes * 要调用的服务方法的真实参数类型 */ abstract public Object[] transformRequest(String methodName, Object[] args, String[] parameterTypes) throws Exception;

    /** * 转换请求参数类型 * * @param methodName * @param args * @param parameterTypes * @return * @throws Exception */ abstract public String[] transformRequestTypes(String methodName, Object[] args, String[] parameterTypes) throws Exception;

    该 transformer 服务在服务端将客户端传递的参数转化为真实的业务类型,HSF 使用转化后的参数进行业务调用,然后使用 transformer 将业务结果进行转化后返回给 top 客户端。

    2020-03-28 22:30:55
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
面向失败设计 立即下载
JAVA 应用排查全景图 立即下载
Go 构建日请求千亿级微服务的最佳实践 立即下载