insque 0.5.2 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 01104bacbddad2fd85675e9f242aea346d3101c9
4
- data.tar.gz: a3debfd746d82c059abf4f6423f1aa9bb2f6baf4
3
+ metadata.gz: a6bc4d6a0e64d20aa174ad1edb4e7b0800db567f
4
+ data.tar.gz: 0c055a801704a918e7f5c54de6c13a6d2a4aa855
5
5
  SHA512:
6
- metadata.gz: 8d2e64b82459b0268286ec5c9d2e9dd5209f58e99dbd8ac70f0bb734886e7f607b6cd0c4a2e3e40efd79552629e2791193fda349432f26c9cd0267f72b418a1c
7
- data.tar.gz: 4240f9fb0a74cae2a5bf7b416b8ecc506d8fad44bf83562af008ecbc97d1c51bb505c4436dbf882c02f9edfc8cd31d3e9de5cc8ed42be999c3ca3d7ed0642246
6
+ metadata.gz: fc420d9a911864023ec1f2a99fbba467228f349a3363be2bda5edf254b24f10dca161a251f600835c95ff9897de9ea51aa8949c102fde3dc756e53c187b46689
7
+ data.tar.gz: 92a6ae35dd54be1e6db13a7dcb47b9a5694be04817752ef0479c05364a5ddd182047174e8ea571028db14703d0cc3934e268f5db9a6b256feb30e86344812ee5
data/README.md CHANGED
@@ -4,7 +4,7 @@ Instant queue. Background processing and message driven communication tool. Fast
4
4
 
5
5
  ## Installation
6
6
 
7
- Add this line to your application's Gemfile:
7
+ Add this line to your application's `Gemfile`:
8
8
 
9
9
  gem 'insque'
10
10
 
@@ -29,12 +29,19 @@ To broadcast message use:
29
29
  ```ruby
30
30
  Insque.broadcast :message_name, {:params => {:some => :params}}
31
31
  ```
32
- There is an easy way to use insque as background jobs processing. You can use `send_later` method to call any method of your rails models in background
33
- . You still need listener running to make this work.
32
+ There is an easy way to use insque as background jobs processing. You can use `send_later` method to call any method of your rails models in background:
34
33
  ```ruby
35
34
  @model = MyModel.first
36
35
  @model.send_later :mymethod, 'some', 'params'
37
36
  ```
37
+ You'll need a special slow listener running to make this work.
38
+ ```ruby
39
+ Insque.slow_listen
40
+ ```
41
+ there is a matching slow janitor as well:
42
+ ```ruby
43
+ Insque.slow_janitor
44
+ ```
38
45
 
39
46
  ### Recieving
40
47
 
@@ -61,28 +68,14 @@ To start recieving messages you need to:
61
68
 
62
69
  or just run `bundle exec rake insque:janitor` from your console.
63
70
 
64
- ### Slow Queue and send_later
65
-
66
- Insque can be used for processing slow tasks in background. Slow tasks created with send_later method call of any ActiveRecord model:
67
- ```ruby
68
- User.send_later :some_slow_method
69
- ```
70
- and processed by a special slow listener:
71
- ```ruby
72
- Insque.slow_listen
73
- ```
74
- there is matching slow janitor as well:
75
- ```ruby
76
- Insque.slow_janitor
77
- ```
78
- ### insque:run
71
+ ### Run All At Once
79
72
 
80
73
  There is a simple way to run all insque workers, both regular and slow in a single multi-threaded process:
81
74
  ```ruby
82
75
  bundle exec rake insque:run
83
76
  ```
84
77
 
85
- ### RedisCluster support
78
+ ### Redis Cluster Support
86
79
 
87
80
  To make insque run on Redis Cluster add this line to your application's `Gemfile`:
88
81
 
data/insque.gemspec CHANGED
@@ -16,5 +16,5 @@ Gem::Specification.new do |gem|
16
16
  gem.require_paths = ["lib"]
17
17
  gem.version = Insque::VERSION
18
18
 
19
- gem.add_dependency('redis', '~> 2.2', '>= 2.2.2')
19
+ gem.add_dependency('redis', '> 2')
20
20
  end
@@ -1,3 +1,3 @@
1
1
  module Insque
2
- VERSION = "0.5.2"
2
+ VERSION = "0.6.0"
3
3
  end
data/lib/insque.rb CHANGED
@@ -3,6 +3,16 @@ require "redis"
3
3
  require "insque/railtie" if defined?(Rails)
4
4
 
5
5
  module Insque
6
+ DEFAULT_INBOX_TTL = 10800 # seconds
7
+
8
+ def self.inbox_ttl= val
9
+ @inbox_ttl = val
10
+ end
11
+
12
+ def self.inbox_ttl
13
+ @inbox_ttl || DEFAULT_INBOX_TTL
14
+ end
15
+
6
16
  def self.debug= debug
7
17
  @debug = debug
8
18
  end
@@ -31,6 +41,7 @@ module Insque
31
41
  def self.sender= sender
32
42
  @sender = sender
33
43
  @inbox = "{insque}inbox_#{sender}"
44
+ @inbox_pointer = "{insque}inbox_pointer_#{sender}"
34
45
  @processing = "{insque}processing_#{sender}"
35
46
  @slow_inbox = "{insque}slow_inbox_#{sender}"
36
47
  @slow_processing = "{insque}slow_processing_#{sender}"
@@ -41,7 +52,7 @@ module Insque
41
52
  keys = []
42
53
  case recipient
43
54
  when :any
44
- keys = @redis.smembers '{insque}inboxes'
55
+ keys = @redis.mget *@redis.keys('{insque}inbox_pointer_*')
45
56
  when :self
46
57
  keys = [@inbox]
47
58
  when :slow
@@ -58,8 +69,7 @@ module Insque
58
69
 
59
70
  def self.listen worker_name='', redis=nil
60
71
  redis ||= create_redis_connection
61
- redis.sadd '{insque}inboxes', @inbox
62
- do_listen @inbox, @processing, redis, worker_name
72
+ do_listen @inbox, @processing, redis, worker_name, @inbox_pointer
63
73
  end
64
74
 
65
75
  def self.slow_listen worker_name='', redis=nil
@@ -75,14 +85,16 @@ module Insque
75
85
  end
76
86
 
77
87
  private
78
- def self.do_listen inbox, processing, redis, worker_name
88
+ def self.do_listen inbox, processing, redis, worker_name, pointer=nil
79
89
  log "#{worker_name} START LISTENING #{inbox}"
80
90
  loop do
91
+ redis.setex(pointer, inbox_ttl, inbox) if pointer
81
92
  message = redis.brpoplpush(inbox, processing, 0)
82
93
  log "#{worker_name} RECEIVING: #{message}" if @debug
83
94
  begin
84
95
  parsed_message = JSON.parse message
85
- send(parsed_message['message'], parsed_message) if self.respond_to? parsed_message['message']
96
+ send(parsed_message['message'], parsed_message)
97
+ rescue NoMethodError
86
98
  rescue => e
87
99
  log "#{worker_name} ========== BROKEN_MESSAGE: #{message} =========="
88
100
  log e.inspect
@@ -2,6 +2,7 @@ namespace :insque do
2
2
  desc 'Starts insque listener and janitor'
3
3
  task :run => :environment do
4
4
  trap('TERM') { puts "SIGTERM"; exit 0 }
5
+ Thread.abort_on_exception=true
5
6
  threads = []
6
7
  threads << Thread.new() { Insque.listen }
7
8
  threads << Thread.new() { Insque.janitor }
@@ -13,12 +14,14 @@ namespace :insque do
13
14
  desc 'Starts insque listener'
14
15
  task :listener => :environment do
15
16
  trap('TERM') { puts "SIGTERM"; exit 0 }
17
+ Thread.abort_on_exception=true
16
18
  Insque.listen
17
19
  end
18
20
 
19
21
  desc 'Starts insque janitor'
20
22
  task :janitor => :environment do
21
23
  trap('TERM') { puts "SIGTERM"; exit 0 }
24
+ Thread.abort_on_exception=true
22
25
  Insque.janitor
23
26
  end
24
27
  end
metadata CHANGED
@@ -1,35 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: insque
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - gropher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-10 00:00:00.000000000 Z
11
+ date: 2018-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.2'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 2.2.2
19
+ version: '2'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: '2.2'
30
- - - ">="
24
+ - - ">"
31
25
  - !ruby/object:Gem::Version
32
- version: 2.2.2
26
+ version: '2'
33
27
  description: Instant queue. Background processing and message driven communication
34
28
  tool. Faster and simplier alternative to Resque.
35
29
  email: