Skip to content
This repository has been archived by the owner on Aug 17, 2023. It is now read-only.

thunks/thunk-disque

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

thunk-disque

A thunk/promise-based disque client, support all disque features.

NPM version Build Status Downloads js-standard-style

Features

  • Auto meet nodes to cluster
  • Auto connect available nodes on demand
  • Auto select connection by jobId

中文教程 http://disquebook.com/

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 by 1.2. This delay normally grows infinitely, but setting retryMaxDelay limits delay to maximum value, provided in milliseconds.

    • maxAttempts: {Number}, Optional, Default: 10. By default client will try reconnecting until connected. Setting maxAttempts 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)

Events

client.on('close', function () {})

client.on('connect', function () {})

client.on('connection', function (connection) {})

client.on('warn', function (error) {})

client.on('error', function (error) {})

client.on('reconnecting', function (message) {})

client.on('monitor', function (message) {})

Others

client.clientCommands

client.clientEnd()

client.clientUnref()

Disque Commands

client.ackjob

client.addjob

client.auth

client.bgrewriteaof

client.client

client.cluster

client.command

client.config

client.debug

client.deljob

client.dequeue

client.enqueue

client.fastack

client.getjob

client.hello

client.info

client.latency

client.loadjob

client.monitor

client.ping

client.qlen

client.qpeek

client.show

client.shutdown

client.slowlog

client.time

About

A thunk/promise-based disque client.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •