V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
873792861
V2EX  ›  Node.js

nodejs 调用 dubbo 接口报错

  •  
  •   873792861 · 2022-10-10 01:26:57 +08:00 · 3853 次点击
    这是一个创建于 801 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,对 nodejs 还不熟悉。按这里的指引,尝试用 dubbo-js 调用 dubbo-samples 的 sayhello 接口。一共两个文件,dubbo-test.ts 的内容如下
    `
    import { Dubbo } from 'apache-dubbo-consumer'
    import { Zk} from 'apache-dubbo-registry'
    import {HelloService} from './service'

    const dubbo = new Dubbo<typeof HelloService>({
    application: {name: 'dubbo-node-bff'}, // 标记调用方,信息存储在注册中心,方便排查问题
    registry: Zk({ connect: '192.168.1.122:2181' }), // 以 Zk 作为注册中心,详细的初始化参考 @apache/dubbo-registry 的 api
    services:HelloService, // 代理的服务 // boolean 可选参数 是否开启对 dubbox 的支持
    dubboInvokeTimeout:15, // number 可选参数 最大超时时间 默认 5s
    // string 可选参数 设置 dubbo 版本
    // 设置调用元数据 可选参数
    });
    //main method
    dubbo.service.HelloService.sayHello('dd');
    `
    service.ts 的内容如下:
    `
    import { Dubbo, TDubboCallResult } from 'apache-dubbo-consumer'

    // 获取更好的代码提示
    export interface IHelloService {
    sayHello(name: string): TDubboCallResult<string>
    }

    export const HelloService = (dubbo: Dubbo) =>
    dubbo.proxyService<IHelloService>({
    dubboInterface: 'org.apache.dubbo.service.HelloService',
    methods: {
    sayHello(name: string) {
    return [name] // 此处为代理方法,不需要具体的实现,我们只需要将参数透传即可,这样 dubbo-consumer 就可以获取完整的服务信息
    }
    }
    })
    `
    但是运行一直报错:Property 'HelloService' does not exist on type 'TDubboService<(dubbo: Dubbo<Object>) => IHelloService>'.
    这是要什么修改呢?希望大家能够多多指点
    3 条回复    2022-10-12 11:34:54 +08:00
    zbinlin
        1
    zbinlin  
       2022-10-10 22:10:52 +08:00
    new Dubbo 接受的泛型应该是一个对象来的,services 的值也一样

    import {HelloService} from './service'
    改成
    import services from './service.mjs'

    services:HelloService
    改成
    services,

    export const HelloService = (dubbo: Dubbo) =>
    改成
    const HelloService = (dubbo: Dubbo) =>

    同时在最后 exportdefault 一个包含 HelloService 的对象:
    export default {
    HelloService
    }
    873792861
        2
    873792861  
    OP
       2022-10-11 23:53:03 +08:00
    @zbinlin 非常感谢您!按你所说的去改,确实可以执行了,但是报错:res: null,
    err: DubboDecodeError: only support hessian serialization
    zbinlin
        3
    zbinlin  
       2022-10-12 11:34:54 +08:00
    @873792861 从 `apache-dubbo-consumer` improt 一个 `java` 进来,然后将 `return [name] ` 改成 `return [java.String(name)] `

    PS: 如没必要,真的不建议去用这个东西。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1071 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:55 · PVG 06:55 · LAX 14:55 · JFK 17:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.