redis_message_capsule 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0215b76d96a1d432d94d3cf26f4efccd5e1f2735
4
+ data.tar.gz: 72bb72a589d99c58fe15994f3b61956b5dc98b89
5
+ SHA512:
6
+ metadata.gz: 76449cdfb3c0cbd3774a728c296c4c34930809bdb9f4fa7904f69c2e37b968fc7f350e3fad7c349e6f818593c1a90c0c8c3d59fc2f5029346f328cc6010435de
7
+ data.tar.gz: 3fe6e4c83ed511ee70a45784f07703e27da442e4ade0fc19f1d616534bb1bbb9d8d0fe110bfff70a83646c140b7d67e69a704e1b7a73273fb9b2f2ef55ab2318
data/README.md CHANGED
@@ -18,6 +18,8 @@ Send messages between node or rails apps asynchronously (via redis).
18
18
  ## Usage
19
19
  The purpose of RedisMessageCapsule is to enable separate apps to communicate with each other asynchronously.
20
20
 
21
+ The ruby implementation listens for messages in a separate thread, and node listens in a separate Fiber.
22
+
21
23
  ### Make sure redis is running:
22
24
  The code below defaults to using redis running on localhost
23
25
 
@@ -29,7 +31,7 @@ Both windows can be ruby, can be node, or one can be ruby and one can be node.
29
31
 
30
32
  $ node
31
33
  require('redis_message_capsule')
32
- redisurl = 'redis://127.0.0.1:6379/'
34
+ redisurl = 'redis://127.0.0.1:6379/'
33
35
  capsule = RedisMessageCapsule.capsule(redisurl)
34
36
  cat = capsule.channel('cat')
35
37
  cat.send('meow')
@@ -39,9 +41,10 @@ Both windows can be ruby, can be node, or one can be ruby and one can be node.
39
41
 
40
42
  $ irb
41
43
  require('redis_message_capsule')
42
- redisurl = 'redis://127.0.0.1:6379/'
44
+ redisurl = 'redis://127.0.0.1:6379/'
43
45
  capsule = RedisMessageCapsule.capsule(redisurl)
44
46
  cat = capsule.channel('cat')
47
+ cat.clear # clear existing messages from this channel
45
48
  cat.send('meow')
46
49
  cat.send('meow')
47
50
 
@@ -50,7 +53,7 @@ Both windows can be ruby, can be node, or one can be ruby and one can be node.
50
53
 
51
54
  $ node
52
55
  require('redis_message_capsule')
53
- redisurl = 'redis://127.0.0.1:6379/'
56
+ redisurl = 'redis://127.0.0.1:6379/'
54
57
  capsule = RedisMessageCapsule.capsule(redisurl)
55
58
  cat = capsule.channel('cat')
56
59
  cat.register(function(err, message){ console.log(message) })
@@ -59,10 +62,11 @@ Both windows can be ruby, can be node, or one can be ruby and one can be node.
59
62
 
60
63
  $ irb
61
64
  require('redis_message_capsule')
62
- redisurl = 'redis://127.0.0.1:6379/'
65
+ redisurl = 'redis://127.0.0.1:6379/'
63
66
  capsule = RedisMessageCapsule.capsule(redisurl)
64
67
  cat = capsule.channel('cat')
65
68
  cat.register { |msg| puts msg }
69
+ For Rails apps, listeners can be registered in an initializer.
66
70
 
67
71
  ### To Send More Messages From Window 1
68
72
  **in node**:
@@ -88,8 +92,8 @@ This module sends messages in a queue rather than a typical pub/sub model: messa
88
92
 
89
93
  ### Multiple Listeners on a Channel Will Round Robin
90
94
  * If multiple apps are listening on the same channel, only one will actually receive the message and pass it on to its registered handlers for processing.
91
- * Listeners run in their own thread (in ruby) or fiber(in node) and may block waiting for a message.
92
- * When a message comes in, only the app that was waiting the longest will receive it.
95
+ * Listeners run in their own thread (in ruby) or fiber (in node). They will block themselves when waiting for a message, so the main event loop can continue.
96
+ * When a message comes in, only the app that was waiting the longest will receive it (the message will be forwarded to all handlers registered in that app).
93
97
 
94
98
  ## Environment
95
99
  In order for 2 apps to send messages to each other, they must bind a capsule to the same redis DB and select the same db number.
@@ -114,7 +118,7 @@ In node use one of the following to set your environment
114
118
  Alternatively, you can specify exactly what you want when materializing a capsule:
115
119
 
116
120
  RedisMessageCapsule = require('redis_message_capsule')
117
- redisurl = process.env.REDIS_URL || process.env.REDISTOGO_URL || 'redis://127.0.0.1:6379/'
121
+ redisurl = process.env.REDIS_URL || process.env.REDISTOGO_URL || 'redis://127.0.0.1:6379/'
118
122
  redisdb = 5
119
123
  capsule = RedisMessageCapsule.capsule(redisurl, redisdb)
120
124
 
@@ -32,7 +32,7 @@ module RedisMessageCapsule
32
32
  def self.capsules() @capsules ||= {} end
33
33
  def self.make_capsule_key(url, db_num) "#{url}.#{db_num}" end
34
34
  def self.materialize_capsule(redis_url=nil, db_number=-1)
35
- url = redis_url || config.redis_url
35
+ url = redis_url || config.redis_url
36
36
  redis_uri = URI.parse(url) rescue nil
37
37
  return nil if redis_uri.nil?
38
38
 
@@ -99,12 +99,13 @@ class RedisMessageCapsule::Capsule::Channel
99
99
  @listener = nil
100
100
  end
101
101
 
102
+ def clear
103
+ redis_client.del channel_name
104
+ end
105
+
102
106
  def send (message)
103
107
  payload = { 'data' => message }
104
108
  redis_client.rpush channel_name, payload.to_json
105
- rescue Exception => e
106
- puts e.message
107
- puts e.backtrace
108
109
  ensure
109
110
  self # chainability
110
111
  end
@@ -155,7 +156,7 @@ class RedisMessageCapsule::Capsule::Channel::Listener
155
156
  @listener_thread ||= Thread.new do
156
157
 
157
158
  blocking_redis_client = RedisMessageCapsule.materialize_redis_client @redis_uri, @db_number
158
- # This redis connection will block when popping, so it is created inside of its own thread
159
+ # This redis connection will block when popping, so it is created inside of its own thread
159
160
 
160
161
  Thread.current[:name] = :RedisMessageCapsule
161
162
  Thread.current[:chanel] = @channel_name
@@ -175,6 +176,7 @@ class RedisMessageCapsule::Capsule::Channel::Listener
175
176
  end
176
177
  rescue Exception => e
177
178
  Thread.current[:listening] = false # stop listening
179
+ raise e
178
180
  end
179
181
  end # while
180
182
  end # Thread.new
@@ -1,3 +1,3 @@
1
1
  module RedisMessageCapsule
2
- VERSION = "0.8.2"
2
+ VERSION = "0.8.3"
3
3
  end
metadata CHANGED
@@ -1,94 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis_message_capsule
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
5
- prerelease:
4
+ version: 0.8.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Arbind
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-11-25 00:00:00.000000000 Z
11
+ date: 2013-09-05 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: redis
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: json
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rake
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rspec
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: simplecov
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  description: Send messages between node or rails apps asynchronously (via redis).
@@ -109,27 +98,26 @@ files:
109
98
  - spec/spec_helper.rb
110
99
  homepage: https://github.com/arbind/redis_message_capsule-gem
111
100
  licenses: []
101
+ metadata: {}
112
102
  post_install_message:
113
103
  rdoc_options: []
114
104
  require_paths:
115
105
  - lib
116
106
  required_ruby_version: !ruby/object:Gem::Requirement
117
- none: false
118
107
  requirements:
119
- - - ! '>='
108
+ - - '>='
120
109
  - !ruby/object:Gem::Version
121
110
  version: '0'
122
111
  required_rubygems_version: !ruby/object:Gem::Requirement
123
- none: false
124
112
  requirements:
125
- - - ! '>='
113
+ - - '>='
126
114
  - !ruby/object:Gem::Version
127
115
  version: '0'
128
116
  requirements: []
129
117
  rubyforge_project:
130
- rubygems_version: 1.8.24
118
+ rubygems_version: 2.0.5
131
119
  signing_key:
132
- specification_version: 3
120
+ specification_version: 4
133
121
  summary: See the README file for code demonstrations
134
122
  test_files:
135
123
  - spec/spec_helper.rb