Ray

Results 167 comments of Ray

motan-go的配置项含义与motan java版本一致,但是目前还不支持那么全面。可以先参考java版本的配置项含义说明 目前可以使用的配置项可以参考main目录下的cliendemo.yaml, serverdemo.yaml,agentdemo.yaml几个文件,其中motan-registry、motan-basicService、motan-service、motan-basicRefer、motan-refer中的配置项含义与java版本一致。 agent需要单独配置项在yaml文件的motan-agent这个section下,说明参照几个demo的yaml port: 9981 # agent对外提供服务的端口. mport: 8002 # agent 管理端口,后续会在此端口提供丰富的管理功能 log_dir: "./agentlogs" # 日志打印目录 registry: "zk-registry" # 注册agent自身信息时使用的注册中心id,与motan-registry中配置的id相对应 application: "ray-test" # agent标识,一般表示哪个业务方的agent,后续会提供按agent业务进行管理的一些功能 其他的请等完整文档吧 :)

@a5272689 中文文档已经整理完,欢迎反馈建议 https://github.com/weibocom/motan-go/wiki/zh_overview

可以参考main/clientdemo.go,其中的mclient2是和java的demo一致的,可以通过直连或者通过zk注册中心调通java demo中的server。 目前motan-go仅支持simple序列化方式,simple只支持null、string、map以及byte[]几种对象序列化。后续会支持pb、hprose等其他跨语言序列化方式。 mclient2 := mccontext.GetClient("mytest-demo")

@twdp hprose的支持暂时不在排期中,欢迎PR

motan-go现在有两个主要场景,mesh和client,泛化的问题应该只和client模式相关,motan的client并不限制参数类型,只要参数能与server端兼容就能进行调用; 你问题描述中的我理解是需要动态配置功能,这块后续会考虑在mesh场景支持配置动态下发、reload能力。 如果是集成测试或者mock服务等非线上系统使用的话,可以参考dynamicConfig.go的方式支持服务的动态注册与订阅。

motan使用反射机制执行server端的service,由于golang没有类似java的threadlocal的隐式传递机制,在server端的业务逻辑中无法直接获取到rpc的context。 后续我们考虑通过服务契约自动生成golang service时在方法参数中显示增加context来提供类似机制,不过需要等多语言服务描述功能完成后(https://github.com/weibreeze 目前还在开发调试阶段),才能进行。 也可以考虑在service方法签名中显示增加rpc的context,然后在实现provider[接口扩展](https://github.com/weibocom/motan-go/wiki/zh_userguide#自定义扩展注册),在反射调用时增加context参数临时解决这个问题。默认server端的provider是DefaultProvider,扩展方式可以参考provider包下的其他provider扩展类。

java端可以直接在业务代码中通过`RpcContext.getContext()`获取请求上下文,所以不需要额外处理。 所以只需要在golang的业务端处理一下,能获取到请求相关信息就可以了。

跨语言使用复杂参数时,建议使用pb进行交互,pb序列化正在开发、测试中,会尽快提交pr

1、 目前java client通过agent调用是在registry配置中使用direct注册中心,然后把address配置为agent的ip:port,让client直接调用到agent的代理端口上; java server侧也同样用direct注册中心,这样java server并不会注册服务。服务的注册配置在agent中,由agent注册serve,并反向代理java server的rpc端口。 不过这种方式稍显复杂,我们打算java中支持把agent作为注册中心,这样agent可以动态注册和订阅服务,agent中也不必再配一份配置了,只在java中配置一份就可以。目前这个功能正在研发中,预计发布需要1个月左右的时间。 2、php通过agent调用服务的方式可以参考 https://github.com/weibo-mesh , 我们正在逐步完善。 3、simple定位是简单数据类型的序列化,暂不支持pojo对象的序列化。我们正在开发新的对象序列化方式,适合java、php等不同语言交互,也会在近期完成。敬请关注~

@TeacherKevin demo中client即可以通过agent访问服务,也可以直接访问服务,所以会有很多重复的配置项。 client在通过agent访问服务时,只需要protocol、path和group等信息就可以,并不需要服务治理相关的配置项,例如不同的治理filter。 也就是说,client和agent都可以配置服务治理能力,但是实际使用中,如果是 client直连就会在client中配置服务治理相关功能;如果是通过agent交互,则会在agent中配置服务治理。