master

package module
v0.0.0-...-1b273c6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 30, 2023 License: MIT Imports: 8 Imported by: 0

README

master-election

master-election是进行主从选举的工具包。在分布式场景,我们经常需要多个实例中的某一个实例去单独的运行某一串逻辑。 此包可以帮助你快速上手,并且忽略掉选主的具体细节。

支持组件
  • Mysql (已完成)
  • Redis (待开发)
  • PostgreSQL (待开发)
  • ETCD (待开发)
  • Consul (待开发)
  • Mongodb (待开发)
安装
go get github.com/changsongl/master-election
示例
package main

import (
	"fmt"
	"time"

	"github.com/changsongl/master-election"
	"github.com/changsongl/master-election/lock/mysql"
)

func main() {
	m, err := master.New(
		mysql.NewMasterLock(
			&mysql.Config{
				User:      "root",
				Password:  "123456",
				Host:      "127.0.0.1",
				Port:      3306,
				TableName: "master_election_table",
				DBName:    "master_election_database",
				CreateDB:  true,
			},
		),
		master.OptionHeartbeat(time.Second*2),
		master.OptionMasterStartHook(func(epoch uint64) {
			fmt.Printf("master start: epoch %d\n", epoch)
		}),
		master.OptionMasterEndHook(func(epoch uint64) {
			fmt.Printf("master end: epoch %d\n", epoch)
		}),
		// other option available
	)

	if err != nil {
		panic(err)
	}

	go func() {
		err = m.Start()
		if err != nil {
			panic(err)
		}
	}()

	for {
		if m.IsMaster() {
			// do some master logic
		} else {
			// do some slave logic or do nothing
		}
	}

	// m.Stop()
}

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrMasterIsStarted     = errors.New("master is started before")
	ErrMasterHasNotStarted = errors.New("master has not started")
)

Functions

This section is empty.

Types

type Master

type Master interface {
	Start() error
	Stop() error
	IsMaster() bool

	ID() string
}

func New

func New(l lock.MasterLock, opts ...Option) (Master, error)

type Option

type Option interface {
	// contains filtered or unexported methods
}

func OptionDefaultLoggerLogLevel

func OptionDefaultLoggerLogLevel(l log.Level) Option

func OptionHeartBeatMultiplier

func OptionHeartBeatMultiplier(m int) Option

func OptionHeartbeat

func OptionHeartbeat(h time.Duration) Option

func OptionLogger

func OptionLogger(l log.Logger) Option

func OptionMasterEndHook

func OptionMasterEndHook(f func(epoch uint64)) Option

func OptionMasterStartHook

func OptionMasterStartHook(f func(epoch uint64)) Option

func OptionVersion

func OptionVersion(version string) Option

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL