UNPKG

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
/// <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;