48 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package cluster
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 
 | |
| 	"go.unistack.org/micro/v4/metadata"
 | |
| )
 | |
| 
 | |
| // Message sent to member in cluster
 | |
| type Message interface {
 | |
| 	// Header returns message headers
 | |
| 	Header() metadata.Metadata
 | |
| 	// Body returns broker message may be []byte slice or some go struct or interface
 | |
| 	Body() interface{}
 | |
| }
 | |
| 
 | |
| type Node interface {
 | |
| 	// Name returns node name
 | |
| 	Name() string
 | |
| 	// Address returns node address
 | |
| 	Address() string
 | |
| 	// Metadata returns node metadata
 | |
| 	Metadata() metadata.Metadata
 | |
| }
 | |
| 
 | |
| // Cluster interface used for cluster communication across nodes
 | |
| type Cluster interface {
 | |
| 	// Join is used to take an existing members and performing state sync
 | |
| 	Join(ctx context.Context, addr ...string) error
 | |
| 	// Leave broadcast a leave message and stop listeners
 | |
| 	Leave(ctx context.Context) error
 | |
| 	// Ping is used to probe live status of the node
 | |
| 	Ping(ctx context.Context, node Node, payload []byte) error
 | |
| 	// Members returns the cluster members
 | |
| 	Members() ([]Node, error)
 | |
| 	// Broadcast send message for all members in cluster, if filter is not nil, nodes may be filtered
 | |
| 	// by key/value pairs
 | |
| 	Broadcast(ctx context.Context, msg Message, filter ...string) error
 | |
| 	// Unicast send message to single member in cluster
 | |
| 	Unicast(ctx context.Context, node Node, msg Message) error
 | |
| 	// Live returns cluster liveness
 | |
| 	Live() bool
 | |
| 	// Ready returns cluster readiness
 | |
| 	Ready() bool
 | |
| 	// Health returns cluster health
 | |
| 	Health() bool
 | |
| }
 |