Simple helper module for having RethinkDB changefeed listeners automatically reconnect if they lose their connection (i.e., if the database server goes down or restarts).
Right now, there is a single (default) function exported: processChangeFeedWithAutoReconnect
.
-
Install the module in your project
$ npm install --save rethinkdb-changefeed-reconnect
Basically, you need to implement 3 functions and configure your options:
getFeed()
: this should return a RethinkDB.changes()
query PromiseonFeedItem(item)
: this is the function that processes each new data itemonError(err)
: this function is where errors will be sent
The available options are:
changefeedName
: used for logging purposes so you can differentiate your different feedsattemptDelay
: how long (in milliseconds) to wait between reconnect attemptsmaxAttempts
: how many reconnect attempts to try before giving upsilent
: whether or not you want the logger to be silenced (default = false)logger
: must be an object with 4 functions:log
,info
,warn
, anderror
(default = global.console)
import rethinkdbdash from 'rethinkdbdash'
import processChangefeed from 'rethinkdb-changefeed-reconnect'
const r = rethinkdbdash({servers: {host: 'localhost', port: 28015, db: 'todo'}, silent: true})
processChangefeed(newTasksFeed, handleNewTask, handleError, {
changefeedName: 'my changefeed',
attemptDelay: 3000,
maxAttempts: 3,
silent: false,
logger: global.console,
})
function newTasksFeed() {
r.table('tasks')
.changes()
.filter(r.row('old_val').eq(null))
}
function handleNewTask(task) {
console.log({task})
}
function handleError(err) {
console.error(err.stack)
}
See also the provided example.
You can run it like so: node example
Then, after you run it, stop your RethinkDB server and watch what gets logged (assuming you passed silent: false
in your options).
This module was developed on top of rethinkdbdash.
Read the instructions for contributing.
-
Clone the repository.
-
Run the setup tasks:
$ npm install $ npm test
See the LICENSE file.