dubbo启动服务:Dubbo-go 源码笔记 一
dubbo启动服务:Dubbo-go 源码笔记 一// OnMessage notified when RPC server session got any message in connection func (h *RpcServerHandler) OnMessage(session getty.Session pkg interface{}) {这一函数实现了在 getty session 接收到 rpc 调用后的一系列处理:rpcHandler 有一个实现好的 OnMessage 函数,根据 getty 的 API,当 client 调用该端口时,会触发 OnMessage。上述只是启动了服务,但还没有看到触发事件的细节,点进上面的 s.newSession 可以看到,dubbo 协议为一个 getty 的 session 默认使用了如下配置:其中很重要的一个配置是 EventListener,传入的是 dubboServer
这一函数做了两个事情:构造触发器、启动服务。
- 将传入的 Invoker 调用 chain 进一步封装,封装成一个 exporter,再将这个 export 放入 map 保存。注意!这里把 exporter 放入了 SetExporterMap中,在下面服务启动的时候,会以注册事件监听器的形式将这个 exporter 取出!
- 调用 dubboProtocol 的 openServer 方法,开启一个针对特定端口的监听。
如上图所示,一个 Session 被传入,开启对应端口的事件监听。
至此构造出了 exporter,完成图中部分:
4. 注册触发动作
上述只是启动了服务,但还没有看到触发事件的细节,点进上面的 s.newSession 可以看到,dubbo 协议为一个 getty 的 session 默认使用了如下配置:
其中很重要的一个配置是 EventListener,传入的是 dubboServer 的默认 rpcHandler。
protocol/dubbo/listener.go:OnMessage()
rpcHandler 有一个实现好的 OnMessage 函数,根据 getty 的 API,当 client 调用该端口时,会触发 OnMessage。
// OnMessage notified when RPC server session got any message in connection
func (h *RpcServerHandler) OnMessage(session getty.Session pkg interface{}) {
这一函数实现了在 getty session 接收到 rpc 调用后的一系列处理:
- 传入包的解析
- 根据请求包构造请求 url