GithubHelp home page GithubHelp logo

sofastack / sofa-rpc-node Goto Github PK

View Code? Open in Web Editor NEW
612.0 35.0 64.0 17.04 MB

SOFARPC Node is a high-performance, high-extensibility, production-level Nodejs RPC framework.

License: MIT License

JavaScript 100.00%
sofa rpc rpc-framework nodejs sofa-rpc sofastack

sofa-rpc-node's People

Contributors

changedenczd avatar chenfengjw163 avatar duan-0916 avatar fengmk2 avatar gxcsoccer avatar hyj1991 avatar kenyeec avatar killagu avatar mansonchor avatar mytecust avatar onlylovermb avatar rabbitsion avatar semantic-release-bot avatar smile21 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sofa-rpc-node's Issues

参照demo ,一直报一个错。

2018-11-25 11:23:47,345 WARN 8708 nodejs.ResponseTimeoutError: register to channel: [email protected]:2181 failed, will retry after 3s, Server no response in 3000ms, address#127.0.0.1:7777

直连模式可以调用,但是使用 ZookeeperRegistry 就一直报上面的错

支持motan协议吗

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Can't find remote invoke method

Describe the bug
Trying to connect to JAVA server using SOFA boot, the service was connected but when I invoke the method, got error

RPC-02412: Cannot find invoke method

I have tried every combination of the method on the server, but doesn't work. Any Idea what to put in the method?

Thanks!

To Reproduce
Steps to reproduce the behavior:

  1. Start JAVA SOFA Boot server
  2. Create a client with direct connect to the server
  3. Run invoke call
  4. See error

Expected behavior
Expected response in server logs or even other errors

how to re-publish after reconnected to the zookeeper ?

After the connection expired , it will auto reconnect , but how can we re-publish the provider ?
is there any way to do sth like this :

server.start()
    .then(async () => {
        server.publish();
        server.on('server:event', async (e) => {
            if (e.type === 'zookeeper' && e.name === 'connected') {
                server.services.get(e.id).rePublish();
            }
        });
    });

启动两个RpcServer,再关闭其中一个,另一个也无法使用

1、按照demo创建两个进程,一个RpcServer使用12200端口,另一个使用12201端口

'use strict';

const { RpcServer } = require('sofa-rpc-node').server;
const { ZookeeperRegistry } = require('sofa-rpc-node').registry;
const logger = console;

// 1. 创建 zk 注册中心客户端
const registry = new ZookeeperRegistry({
  logger,
  address: '127.0.0.1:2181', // 需要本地启动一个 zkServer
});

// 2. 创建 RPC Server 实例
const server = new RpcServer({
  logger,
  registry, // 传入注册中心客户端
  port: 12200, // 另一个使用12201
});

// 3. 添加服务
server.addService({
  interfaceName: 'com.nodejs.test.TestService',
}, {
  async plus(a, b) {
    console.log(arguments)
    return a + b;
  },
});

// 4. 启动 Server 并发布服务
server.start()
  .then(() => {
    server.publish();
  });

2、ZK显示/sofa-rpc/com.nodejs.test.TestService/providers有两个节点

[bolt%3A%2F%2F10.39.190.174%3A12200%3FstartTime%3D1550489950969%26pid%3D41913%26uniqueId%3D%26dynamic%3Dtrue%26appName%3D%26timeout%3D3000%26serialization%3Dhessian2%26weight%3D100%26accepts%3D100000%26language%3Dnodejs%26rpcVer%3D50400%26protocol%3D%26interface%3Dcom.nodejs.test.TestService%26version%3D1.0%26group%3DSOFA, bolt%3A%2F%2F10.39.190.174%3A12201%3FstartTime%3D1550489964826%26pid%3D41915%26uniqueId%3D%26dynamic%3Dtrue%26appName%3D%26timeout%3D3000%26serialization%3Dhessian2%26weight%3D100%26accepts%3D100000%26language%3Dnodejs%26rpcVer%3D50400%26protocol%3D%26interface%3Dcom.nodejs.test.TestService%26version%3D1.0%26group%3DSOFA]

2、关闭其中一个进程
3、过一段时间后,ZK显示/sofa-rpc/com.nodejs.test.TestService/providers下为空

[]

期望另一个进程应该继续提供服务才对

重试机制

invoke 时,如果目标服务器出现网络不可达,或是短暂的繁忙造成请求响应超时时,有没有需要加入重试机制

`npm i` 后会删除`.travis.yml`的`before_install`指令

执行npm i后会删除 .travis.ymlbefore_install指令

-before_install:
-  - 'wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz'
-  - 'tar xf zookeeper-3.4.6.tar.gz'
-  - 'mv zookeeper-3.4.6/conf/zoo_sample.cfg zookeeper-3.4.6/conf/zoo.cfg'
-  - './zookeeper-3.4.6/bin/zkServer.sh start'

zk断网或者本地断网超过N分钟后,死循环导致内存严重泄漏

data_client文件中 zk 重连函数,for循环,遍历 map的keys,并且会触发 zookeeper-client:watcher事件
image

api_client中监听zookeeper-client:watcher 最终会触发data_client的invokeWithWatcher,因为是操作的同一个map _watchers 会导致一个死循环,map永远无法清空,所以需将data_client中的 for (const key of this._watchers.keys()) 替换为
const keys = [...this._watchers.keys()];
for(const key of keys)
image

可以和java dubbo框架互相调用么

想请教下,使用example里dubbo的server提供provider,在java里使用dubbo框架,能调用么。不知道是不是方式不对,我试了不行,还是说java也需要sofa框架的dubbo协议?

集成 dubbo 时,直连服务是可以的,但是通过注册中心就不成功了

  • 集成 dubbo 时,AddressGroup 的 addressList 为空
// sofa-rpc-node/lib/client/consumer.js 中

  async _init() {
    this._addressGroup = this.createAddressGroup(this.id + '@' + this.group);
    if (this.options.serverHost) {
      const addressList = this.options.serverHost.split(',').map(url => this.parseUrl(url));
      setImmediate(() => { this._addressGroup.addressList = addressList; });
    } else {
      await this.registry.ready();
      this._addressGroup = this.createAddressGroup(this.id + '@' + this.group);
      this._addressListener = addressList => {
// addressList 为 []
        this._addressGroup.addressList = addressList.map(url => this.parseUrl(url));
      };
      this.registry.subscribe(this.registryConfig, this._addressListener);
    }
    await this._addressGroup.ready();
  }

  • 上述原因导致 invoke 时 执行
async getConnection(req) {
    return await this._addressGroup.getConnection(req);
  }

时返回 null

想知道为什么 addressList 是空的?

集成 dubbo 时,直连服务是可以的,但是通过注册中心就不成功了

还有 group 的设置貌似不成功,直连的时候我需要将 group 名字写在 interfaceName 里面才行,单独配置 group 或者在初始化 client 时设置 group 都不成功

支持Nacos

支持Nacos作为注册中心,目前仅支持zk,局限性太大。不知道仓库是否还在维护?

sofa node作为客户端,调用使用hessian4的版本的服务端,出现异常

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

服务端使用默认hessian3序列化版本,用node客户端去调用服务端,服务端可以正常接收请求,并返回,
但是当服务端hessian版本换成4的话,使用原来的node代码去调用的时候,出现异常,服务端未收到请求,我猜是序列化的问题,以下是错误日志:
image,寻求专业解答。

Docker swarm, 通过zookeeper得到rpc服务器地址后无法连接

container 的网络
eth0 Link encap:Ethernet HWaddr 02:42:0A:FF:01:96
inet addr:10.255.1.150 Bcast:10.255.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1
RX packets:164 errors:0 dropped:0 overruns:0 frame:0
TX packets:118 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:18204 (17.7 KiB) TX bytes:16597 (16.2 KiB)

eth1 Link encap:Ethernet HWaddr 02:42:0A:00:2B:81
inet addr:10.0.43.129 Bcast:10.0.43.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1
RX packets:994842 errors:0 dropped:0 overruns:0 frame:0
TX packets:1557577 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:88179528 (84.0 MiB) TX bytes:124562996 (118.7 MiB)

eth0 被自动注册到zookeeper去了, 但是只有eth1 才能够顺利访问。
如何在注册的时候选择注册哪个网络啊?

rpcServer是否可以手动指定服务ip?

gxcsoccer 你好

我这边在实际使用的时候有一个小问题,我的服务器有多块网卡,并不能实际的准确指定服务的ip,
能否在rpcServer初始化的时候指定服务ip呢?

类似这样,

// 2. 创建 RPC Server 实例
const server = new RpcServer({
  logger,
  registry, // 传入注册中心客户端
  port: 12200,
  // 传入本机ip
  ip?: 192.168.1.1
});

谢谢

本项目还在维护吗

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

invoke时 增加对中间件返回值处理 方便做请求拦截 请求缓存

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

hessain2 HashMap cannot be cast to xx.xx.entity

node ts 描述参数类

export interface AppPermissionListVo {
   /**
    * 路由LIST
    */
   permissions: Array<AppPlatformPermissionVo>;
}

参数只包装了父级 cn.bhbapp.vo.platform.AppPermissionListVo
于是调用时,AppPlatformPermissionVo解析报错,转换异常。

consumer invoke 无法 ready 时可能会造成内存泄露

问题一:consumer invoke 无法 ready 时,因为会不断 push 回调函数到数组中,所以会造成内存泄露,ready 的执行在这里
问题二:客户端可能会设置 responseTimeout,但如果无法 ready 时就会超过这个 timeout 的时间,客户端不好处理一些超时问题

能否增加一个Nacos的NacosRegister

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

能否增加一个Nacos的NacosRegister

Describe the solution you'd like
A clear and concise description of what you want to happen.

因为注册中心用的Nacos,如果要用Zookeeper还得单独部署zookeeper,或者自己用直连模式,根据Nacos注册的情况,手动负载均衡,如果提供个Nacos的NacosRegister,少写很多代码

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.