mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-04 06:54:45 +08:00
添加随机调用方法
This commit is contained in:
@@ -2,6 +2,7 @@ package cluster
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math/rand"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
@@ -446,6 +447,50 @@ func (ws *CCluster) OnFetchService(iservice service.IService) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (slf *CCluster) CallRandomService(NodeServiceMethod string, args interface{}, reply interface{}) error {
|
||||||
|
var servicename string
|
||||||
|
parts := strings.Split(NodeServiceMethod, ".")
|
||||||
|
if len(parts) == 2 {
|
||||||
|
servicename = parts[0]
|
||||||
|
} else {
|
||||||
|
service.GetLogger().Printf(sysmodule.LEVER_ERROR, "CCluster.CallRandomService(%s) method err", NodeServiceMethod)
|
||||||
|
return fmt.Errorf("CCluster.GoNode(%s) NodeId method err", NodeServiceMethod)
|
||||||
|
}
|
||||||
|
|
||||||
|
nodeList := slf.GetNodeIdByServiceName(servicename, true)
|
||||||
|
if len(nodeList) < 1 {
|
||||||
|
service.GetLogger().Printf(sysmodule.LEVER_ERROR, "CCluster.CallRandomService(%s) no node is online", NodeServiceMethod)
|
||||||
|
return fmt.Errorf("CCluster.GoNode(%s) no node is online", NodeServiceMethod)
|
||||||
|
}
|
||||||
|
|
||||||
|
nodeIndex := rand.Intn(len(nodeList))
|
||||||
|
nodeID := nodeList[nodeIndex]
|
||||||
|
|
||||||
|
return slf.CallNode(nodeID, NodeServiceMethod, args, reply)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *CCluster) GoRandomService(NodeServiceMethod string, args interface{}, queueModle bool) error {
|
||||||
|
var servicename string
|
||||||
|
parts := strings.Split(NodeServiceMethod, ".")
|
||||||
|
if len(parts) == 2 {
|
||||||
|
servicename = parts[0]
|
||||||
|
} else {
|
||||||
|
service.GetLogger().Printf(sysmodule.LEVER_ERROR, "CCluster.CallRandomService(%s) method err", NodeServiceMethod)
|
||||||
|
return fmt.Errorf("CCluster.GoNode(%s) NodeId method err", NodeServiceMethod)
|
||||||
|
}
|
||||||
|
|
||||||
|
nodeList := slf.GetNodeIdByServiceName(servicename, true)
|
||||||
|
if len(nodeList) < 1 {
|
||||||
|
service.GetLogger().Printf(sysmodule.LEVER_ERROR, "CCluster.CallRandomService(%s) no node is online", NodeServiceMethod)
|
||||||
|
return fmt.Errorf("CCluster.GoNode(%s) no node is online", NodeServiceMethod)
|
||||||
|
}
|
||||||
|
|
||||||
|
nodeIndex := rand.Intn(len(nodeList))
|
||||||
|
nodeID := nodeList[nodeIndex]
|
||||||
|
|
||||||
|
return slf.GoNode(nodeID, args, NodeServiceMethod, queueModle)
|
||||||
|
}
|
||||||
|
|
||||||
//向远程服务器调用
|
//向远程服务器调用
|
||||||
//Node.servicename.methodname
|
//Node.servicename.methodname
|
||||||
//servicename.methodname
|
//servicename.methodname
|
||||||
@@ -491,6 +536,17 @@ func GetNodeIdByServiceName(serviceName string, bOnline bool) []int {
|
|||||||
return InstanceClusterMgr().GetNodeIdByServiceName(serviceName, bOnline)
|
return InstanceClusterMgr().GetNodeIdByServiceName(serviceName, bOnline)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//随机选择在线的node发送
|
||||||
|
func CallRandomService(NodeServiceMethod string, args interface{}, reply interface{}) error {
|
||||||
|
return InstanceClusterMgr().CallRandomService(NodeServiceMethod, args, reply)
|
||||||
|
}
|
||||||
|
func GoRandomService(NodeServiceMethod string, args interface{}) error {
|
||||||
|
return InstanceClusterMgr().GoRandomService(NodeServiceMethod, args, false)
|
||||||
|
}
|
||||||
|
func GoRandomServiceQueue(NodeServiceMethod string, args interface{}) error {
|
||||||
|
return InstanceClusterMgr().GoRandomService(NodeServiceMethod, args, true)
|
||||||
|
}
|
||||||
|
|
||||||
var _self *CCluster
|
var _self *CCluster
|
||||||
|
|
||||||
func InstanceClusterMgr() *CCluster {
|
func InstanceClusterMgr() *CCluster {
|
||||||
|
|||||||
Reference in New Issue
Block a user