Neo4j High Availability Bolt Javascript Driver
Neo4j cluster session and transparent failover
About
This driver is a wrapper over the official Neo4j bolt driver and adds a layer of High Availability and transparent failovers
How to install
npm i --save neo4j-ha-bolt-driver
Quick example
const servers = 'http://127.0.0.1:7474' 'bolt://127.0.0.1:7687' 'http://127.0.0.1:7475' 'bolt://127.0.0.1:7688'; const auth = user: 'neo4j' pass: 'password' ;const strategy = Neo4jHAHAStrategiesroundRobin;const rwConfig = Neo4jHAHAReadWritemasterReadWriteSlaveRead;const checkInterval = 500; console;const driver = servers auth strategy rwConfig checkInterval { console; let session; // we get a session and we tell the driver that we will berform at least one write // the strategy is Round Robin but because we want to write // and the read/write config is set to masterReadWriteSlaveRead (only master can write) // this means that it will get a session to the master session = driver; // don't forget to close sessions when you're done with them session; // now we request a read-only session, so all servers are eligible for conenctions // the first server in the list is chosen session = driver; session; // requesting another read-only session will choose the second server // because of the Round Robin session = driver; session;} // when you are done with the driver, just close itdriver;
Enums
HAStrategies
random
: It will pick a random server from the poolroundRobin
: It will round robin through the server poolnearest
: It will pick the server with the lowest latency
HAReadWrite
masterOnly
: Master will be the only queried servermasterWriteOnlySlaveReadOnly
: Master is write-only and slaves are read-onlymasterReadWriteSlaveRead
: Master is read-write and slaves are read-onlyall
: All servers are read-write- Custom HAReadWrite Structure
master: read: Boolean write: Boolean slave: read: Boolean write: Boolean
Status
error (-2)
: Server is returning an error in the HA checkunknown (-1)
: Server is in an unknown statedown ( 0)
: Server is unreachableup ( 1)
: Server is in the cluster
ServerType
unknown ( 0)
: Server is in an unknown stateslave ( 1)
: Server is a slavemaster ( 2)
: server is master
Instantiating a driver
const driver = new Neo4jHA(serverList, options, readyCallback);
Where:
serverList
: is an array of[HTTP URL, BOLT URL]
{bolt: Bolt URL, url: HTTP URL, auth: {user, pass}}
options
:auth
: {user, pass} - for all the connectionsstrategy
: HAStrategiesrwConfig
: HAReadWriteConfigneo4jDriverOptions
: options passed on the the raw neo4j bolt drivercheckInterval
: interval to check servers availabilityretryOnError
: number of times to retry the query until the error is surfaced in callbackbadConnectionsCountAsErrors
: true if a server connection error is counted as an error
readyCallback
: callback when all servers status is known
Usage
const session = driver.session(writeLock[, rwConfig, strategy]);
Where:
writeLock
: Boolean - Tell the driver ifif there will ve any writes in the sessionrwConfig
: custom HAReadWriteConfig for that sessionstrategy
: custom HAStrategies for that session
License
License can be found here