diff --git a/README.md b/README.md index ebd6358..e5cb6df 100644 --- a/README.md +++ b/README.md @@ -383,6 +383,23 @@ too slow process:Timer_orginserver/simple_service.(*TestService1).Loop-fm is tak 直接帮助找到TestService1服务中的Loop函数 +结点连接和断开事件监听: +--------------- +在有些业务中需要关注某结点是否断开连接,可以注册回调如下: +``` +func (ts *TestService) OnInit() error{ + ts.RegRpcListener(ts) + + return nil +} + +func (ts *TestService) OnNodeConnected(nodeId int){ +} + +func (ts *TestService) OnNodeDisconnect(nodeId int){ +} +``` + 第三章:Module使用: --------------- @@ -686,8 +703,35 @@ func (slf *TestService7) GoTest(){ ``` 您可以把TestService6配置到其他的Node中,比如NodeId为2中。只要在一个子网,origin引擎可以无差别调用。开发者只需要关注Service关系。同样它也是您服务器架构设计的核心需要思考的部分。 +第六章:配置服务发现 +--------------- +origin引擎默认使用读取所有结点配置的进行确认结点有哪些Service。引擎也支持动态服务发现的方式,使用了内置的DiscoveryMaster服务用于中心Service,DiscoveryClient用于向DiscoveryMaster获取整个origin网络中所有的结点以及服务信息。具体实现细节请查看这两部分的服务实现。具体使用方式,在以下cluster配置中加入以下内容: +``` +{ + "DiscoveryNode": [{ + "NodeId": 1, + "ListenAddr": "127.0.0.1:8803" + }], + "NodeList": [{ + "NodeId": 1, + "ListenAddr": "127.0.0.1:8801", + "NodeName": "Node_Test1", + "Private": false, + "remark": "//以_打头的,表示只在本机进程,不对整个子网开发", + "ServiceList": ["_TestService1", "TestService9", "TestService10"], + "DiscoveryService": ["TestService8"] + }] +} +``` +新上有两新不同的字段分别为DiscoveryNode与DiscoveryService。其中: -第六章:HttpService使用 +DiscoveryNode中配置了结点Id为1的为服务发现Master,他的监听地址ListenAddr为127.0.0.1:8803 +DiscoveryService表示将筛选origin网络中的TestService8服务,注意如果DiscoveryService不配置,则筛选功能不生效。 + + + + +第七章:HttpService使用 --------------- HttpService是origin引擎中系统实现的http服务,http接口中常用的GET,POST以及url路由处理。 diff --git a/cluster/dynamicdiscovery.go b/cluster/dynamicdiscovery.go index 93f6f44..2fc131f 100644 --- a/cluster/dynamicdiscovery.go +++ b/cluster/dynamicdiscovery.go @@ -72,7 +72,7 @@ func (ds *DynamicDiscoveryMaster) OnStart(){ ds.addNodeInfo(&nodeInfo) } -func (ds *DynamicDiscoveryMaster) OnRpcConnected(nodeId int){ +func (ds *DynamicDiscoveryMaster) OnNodeConnected(nodeId int){ //向它发布所有服务列表信息 var notifyDiscover rpc.SubscribeDiscoverNotify notifyDiscover.IsFull = true @@ -80,7 +80,7 @@ func (ds *DynamicDiscoveryMaster) OnRpcConnected(nodeId int){ ds.GoNode(nodeId,DynamicDiscoveryClientNameRpcMethod,¬ifyDiscover) } -func (ds *DynamicDiscoveryMaster) OnRpcDisconnect(nodeId int){ +func (ds *DynamicDiscoveryMaster) OnNodeDisconnect(nodeId int){ var notifyDiscover rpc.SubscribeDiscoverNotify notifyDiscover.DelNodeId = int32(nodeId) //删除结点 @@ -195,7 +195,7 @@ func (dc *DynamicDiscoveryClient) isDiscoverNode(nodeId int) bool{ return false } -func (dc *DynamicDiscoveryClient) OnRpcConnected(nodeId int) { +func (dc *DynamicDiscoveryClient) OnNodeConnected(nodeId int) { if dc.isDiscoverNode(nodeId) == false { return } @@ -252,7 +252,7 @@ func (dc *DynamicDiscoveryClient) setNodeInfo(nodeInfo *rpc.NodeInfo){ } -func (dc *DynamicDiscoveryClient) OnRpcDisconnect(nodeId int){ +func (dc *DynamicDiscoveryClient) OnNodeDisconnect(nodeId int){ } func (dc *DynamicDiscoveryClient) InitDiscovery(localNodeId int,funDelNode FunDelNode,funSetNodeInfo FunSetNodeInfo) error{ diff --git a/rpc/rpchandler.go b/rpc/rpchandler.go index 2b45c37..a7df1df 100644 --- a/rpc/rpchandler.go +++ b/rpc/rpchandler.go @@ -65,8 +65,8 @@ type RpcHandler struct { type TriggerRpcEvent func(bConnect bool,clientSeq uint32,nodeId int) type IRpcListener interface { - OnRpcConnected(nodeId int) - OnRpcDisconnect(nodeId int) + OnNodeConnected(nodeId int) + OnNodeDisconnect(nodeId int) } type IRpcHandler interface { diff --git a/service/service.go b/service/service.go index 352ac80..7b3eabc 100644 --- a/service/service.go +++ b/service/service.go @@ -231,9 +231,9 @@ func (s *Service) OnStart(){ func (s *Service) OnRpcEvent(ev event.IEvent){ event := ev.(*RpcEventData) if event.IsConnect { - s.rpcEventLister.OnRpcConnected(event.NodeId) + s.rpcEventLister.OnNodeConnected(event.NodeId) }else{ - s.rpcEventLister.OnRpcDisconnect(event.NodeId) + s.rpcEventLister.OnNodeDisconnect(event.NodeId) } }