main.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package zk
  2. import (
  3. "fmt"
  4. "github.com/samuel/go-zookeeper/zk"
  5. "time"
  6. )
  7. type ZookeeperMgr struct {
  8. Conn *zk.Conn
  9. /*
  10. flags有4种取值:
  11. 0:永久,除非手动删除
  12. 1:短暂,session断开则改节点也被删除
  13. 2:会自动在节点后面添加序号
  14. 3:即,短暂且自动添加序号
  15. */
  16. flags int32 //初始化时默认0
  17. acl []zk.ACL //初始化时默认允许所有操作
  18. }
  19. type ZkCfg struct {
  20. Servers []string
  21. }
  22. func InitZookeeper(cfg ZkCfg) *ZookeeperMgr {
  23. conn, _, err := zk.Connect(cfg.Servers, time.Second*5)
  24. if err != nil {
  25. fmt.Println("InitZookeeper失败", err.Error())
  26. }
  27. return &ZookeeperMgr{Conn: conn, acl: zk.WorldACL(zk.PermAll)}
  28. }
  29. func (mgr *ZookeeperMgr) Create(path string, data []byte) (string, error) {
  30. return mgr.Conn.Create(path, data, mgr.flags, mgr.acl)
  31. }
  32. //删改与增不同在于其函数中的version参数,其中version是用于 CAS支持
  33. func (mgr *ZookeeperMgr) Delete(path string) error {
  34. _, stat, err := mgr.Conn.Get(path)
  35. if err != nil {
  36. return err
  37. }
  38. return mgr.Conn.Delete(path, stat.Version) //version是用于 CAS支持
  39. }
  40. func (mgr *ZookeeperMgr) Update(path string, data []byte) error {
  41. _, stat, err := mgr.Conn.Get(path)
  42. if err != nil {
  43. return err
  44. }
  45. _, err = mgr.Conn.Set(path, data, stat.Version) //version是用于 CAS支持
  46. return err
  47. }
  48. func (mgr *ZookeeperMgr) Get(path string) ([]byte, *zk.Stat, error) {
  49. return mgr.Conn.Get(path)
  50. }