node-raft-redis
Version:
Consensus for node microservices, based on a simplified version of the [raft algorithm](https://raft.github.io/). Requires redis as a medium. Features automatic discovery of the services of same kind. Selects one instance of a microservice as leader. For
69 lines (68 loc) • 2.02 kB
TypeScript
/// <reference types="node" />
import { EventEmitter } from "events";
export interface Options {
redis: {
host?: string;
port?: number;
url?: string;
};
kind?: string;
meta?: any;
}
export declare type State = "candidate" | "leader" | "follower";
export interface Instance {
id: string;
state: State;
meta: any;
}
export declare class Candidate extends EventEmitter {
private kind;
private __meta;
private running;
private __instanceId;
private redisClient;
private subscriptionClient;
private leaderSubscription;
private followerSubscription;
private privateSubsciption;
private votes;
private votedFor;
private __currentTerm;
private __state;
private timeout;
private requestInterval;
private leadershipInterval;
private countNodesInterval;
private stopCheckInterval;
private startCheckInterval;
constructor(options: Options);
private keepAlive;
private getInstanceCount;
getInstances(): Promise<Instance[]>;
startTimeout(): Promise<void>;
private startLeadership;
private setState;
private _stop;
private subscribePrivateChannel;
private unsubscribePrivateChannel;
private subscribeFollowerChannel;
private unsubscribeFollowerChannel;
private subscribeLeaderChannel;
private unsubscribeLeaderChannel;
private _start;
start(): Promise<void>;
stop(): Promise<void>;
reelect(): Promise<void>;
stepdown(): Promise<void>;
messageFollowers(message: string): Promise<void>;
messageTo(to: string, message: string): Promise<void>;
messageAll(message: string): Promise<void>;
messageLeader(message: string): Promise<void>;
get currentTerm(): number;
get id(): string;
get state(): State;
getLeader(): Promise<Instance | undefined>;
setMeta(meta: any): Promise<void>;
get meta(): {};
}
export default Candidate;