Awesome
thunk-disque
A thunk/promise-based disque client, support all disque features.
Features
- Auto meet nodes to cluster
- Auto connect available nodes on demand
- Auto select connection by jobId
中文教程 http://disquebook.com/
https://github.com/antirez/disque
https://github.com/thunks/thunks
Installation
Node.js:
npm install thunk-disque
Demo
var disque = require('thunk-disque')
var client = disque.createClient([7711, 7712, 7713])
var clientP = disque.createClient([7711, 7712, 7713], {usePromise: true})
// thunk API
client.info()(function (err, info) {
console.log(err, info)
return this.addjob('queueA', 'Hello', 0)
})(function (err, res) {
console.log(err, res)
// null
// 'DI81250b3ccbac68e6625e79c8e7c5b286b1dcd2ac05a0SQ'
return this.show(res)
})(function (err, res) {
console.log(err, res)
// null
// {
// id: 'DI81250b3ccbac68e6625e79c8e7c5b286b1dcd2ac05a0SQ',
// queue: 'queueA',
// state: 'queued',
// repl: 3,
// ttl: 86400,
// ctime: 1430579357544000000,
// delay: 0,
// retry: 8640,
// 'nodes-delivered':
// [ 'f0e652056250c887ed294a53fa9386ea05abb0be',
// '2067c69f914c619ed9f348f5ce6e7532ec26e9a8',
// '81250b3c4318f0b6463da3742c7cf7069a46b6f6' ],
// 'nodes-confirmed': [],
// 'next-requeue-within': 8639835,
// 'next-awake-within': 8639335,
// body: 'Hello'
// }
return this.clientEnd()
});
// promise API
clientP.info()
.then(function (info) {
console.log(info)
return clientP.addjob('queueA', 'Hello', 0)
})
.then(function (res) {
console.log(res)
// 'DI81250b3ccbac68e6625e79c8e7c5b286b1dcd2ac05a0SQ'
return clientP.show(res)
})
.then(function (res) {
console.log(res)
// {
// id: 'DI81250b3ccbac68e6625e79c8e7c5b286b1dcd2ac05a0SQ',
// queue: 'queueA',
// state: 'queued',
// repl: 3,
// ttl: 86400,
// ctime: 1430579357544000000,
// delay: 0,
// retry: 8640,
// 'nodes-delivered':
// [ 'f0e652056250c887ed294a53fa9386ea05abb0be',
// '2067c69f914c619ed9f348f5ce6e7532ec26e9a8',
// '81250b3c4318f0b6463da3742c7cf7069a46b6f6' ],
// 'nodes-confirmed': [],
// 'next-requeue-within': 8639835,
// 'next-awake-within': 8639335,
// body: 'Hello'
// }
})
.catch(function (err) {
console.error(err)
})
API
var disque = require('thunk-disque')
disque.createClient([port], [host], [options])
disque.createClient([addressArray], [options])
port
: {Number}, default:7711
;host
: {String}, default:'127.0.0.1'
;options
: {Object}, default:{}
;-
handleError
: {Boolean}, Optional, Handle client error event. Default:true
. -
authPass
: {String}, Optional, Default:''
. -
autoMeet
: {Boolean}, Optional, Default:false
. -
returnBuffers
: {Boolean}, Optional, Default:false
. -
usePromise
: {Boolean|Promise}, Optional, Default:false
.Use default Promise:
var disque = require('thunk-disque') var client = disque.createClient({ usePromise: true })
Use bluebird:
var disque = require('thunk-disque') var Bluebird = require('bluebird') var client = disque.createClient({ usePromise: Bluebird })
-
noDelay
: {Boolean}, Optional, Default:true
. Disables the Nagle algorithm. By default TCP connections use the Nagle algorithm, they buffer data before sending it off. Setting true for noDelay will immediately fire off data each time socket.write() is called. -
retryMaxDelay
: {Number}, Optional, Default:Infinity
. By default every time the client tries to connect and fails time before reconnection (delay) almost multiply by1.2
. This delay normally grows infinitely, but settingretryMaxDelay
limits delay to maximum value, provided in milliseconds. -
maxAttempts
: {Number}, Optional, Default:10
. By default client will try reconnecting until connected. SettingmaxAttempts
limits total amount of reconnects.
-
Create a disque client, return the client.
// connect to 127.0.0.1:7711
var client1 = disque.createClient()
var client2 = disque.createClient(7711, '127.0.0.1')
// connect to 127.0.0.1:7711, 127.0.0.1:7712
// and auto meet them into cluster
var client3 = redis.createClient([7711, 7712], {autoMeet: true})
var client4 = redis.createClient(['127.0.0.1:7711', '127.0.0.1:7712'], {autoMeet: true}) // IPv4
var client5 = redis.createClient(['[::1]:7711', '[::1]:7712'], {autoMeet: true}) // IPv6
disque.log([...])
var client = disque.createClient()
client.info()(redis.log)