stack-labs / stack

Edge-Network dev framework

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

能否与原生的grpc服务通信

yiippee opened this issue · comments

舒大你好,感谢你的项目。
请教一个问题,我看这个项目的通信协议好像是基于grpc修改后的(符合micro的协议),那能否与原始的grpc 服务端和客户端通信呢?
貌似好像是不行的?那有其他的方式吗?谢谢。

你好呀,只是用了protobuf的协议,通信层面默认没有使用grpc,而采用grpcTransport情况下是可以与原生grpc通信的,不过要预先声明调用的grpc服务地址。

参考:https://github.com/printfcoder/stack-rpc-tutorials/tree/master/examples/deprecated/grpc

该地址已经归档,但是使用方式基本相似,可酌情使用哈。

感谢你的回答。我试了下,是可以的。
反过来可以访问吗?micro风格的client去访问纯grpc server端,貌似好像是不行的,因为micro风格的客户端是需要服务发现的,好像不能指定服务地址。
或者有什么其他的方式吗?再次谢谢。

@yiippee 可以的,定制selector就可以了,从你们的grpc server自己的注册表中读出来即可,参考:
https://github.com/printfcoder/stack-rpc-tutorials/tree/master/examples/deprecated/client/selector/filter/ip

@printfcoder 好像是不行的。我仿照你的做法,写了一个:
`
filter := func(services []*registry.Service) []*registry.Service {
var filtered []*registry.Service
var node []*registry.Node

	node = append(node, &registry.Node{
		Address: ":9090", // 写死grpc服务地址
	})

	filtered = append(filtered, &registry.Service{
		Name: "helloworld",
		Version: "0.01",
		Nodes: node,
	})

	return filtered
}`

出现这样的错误:err: {"id":"go.micro.client","code":500,"detail":"unknown service helloworld.Greeter","status":"Internal Server Error"}
2021-03-30 19:58:28 file=v3@v3.0.0-20210329103359-9b41d1bf0888/grpc.go:796 level=info Deregistering node: helloworld-cf7f508b-8d09-4658-af73-9498a6af3667

是我哪里写的不对吗?谢谢。

可以调试一下。

可以调试一下。

感觉是不行的啊,micro风格的客户端请求的格式是 /service.Struct/Method,但纯grpc 是 /Struct/Method
而且我没找到可以修改这个格式的切入点啊。 所以,感觉是不行的。
或者你知道有其他的方式吗?谢谢。

试试把router订制一下

我有个疑问,为什么要互调,其实直接用原生grpc,或micro、stack就可以了。如果是有老的业务,使用网关解耦就好。

micro client如何订制router呢?好像没找到方式,有例子吗?谢谢。
是的,就是为了兼容老的业务,我现在主要想调研一下有什么比较好的解决方式。