cluster.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package mhayaFacade
  2. import (
  3. "time"
  4. cproto "github.com/mhaya/net/proto"
  5. )
  6. type (
  7. // IDiscovery 发现服务接口
  8. IDiscovery interface {
  9. Load(app IApplication)
  10. Name() string // 发现服务名称
  11. Map() map[string]IMember // 获取成员列表
  12. ListByType(nodeType string, filterNodeId ...string) []IMember // 根据节点类型获取列表
  13. Random(nodeType string) (IMember, bool) // 根据节点类型随机一个
  14. GetType(nodeId string) (nodeType string, err error) // 根据节点id获取类型
  15. GetMember(nodeId string) (member IMember, found bool) // 获取成员
  16. AddMember(member IMember) // 添加成员
  17. RemoveMember(nodeId string) // 移除成员
  18. OnAddMember(listener MemberListener) // 添加成员监听函数
  19. OnRemoveMember(listener MemberListener) // 移除成员监听函数
  20. Stop()
  21. }
  22. IMember interface {
  23. GetNodeId() string
  24. GetNodeType() string
  25. GetAddress() string
  26. GetSettings() map[string]string
  27. }
  28. MemberListener func(member IMember) // MemberListener 成员增、删监听函数
  29. )
  30. type (
  31. ICluster interface {
  32. Init() // 初始化
  33. PublishLocal(nodeId string, packet *cproto.ClusterPacket) error // 发布本地消息
  34. PublishRemote(nodeId string, packet *cproto.ClusterPacket) error // 发布远程消息
  35. RequestRemote(nodeId string, packet *cproto.ClusterPacket, timeout ...time.Duration) cproto.Response // 请求远程消息
  36. Stop() // 停止
  37. }
  38. )