rmsg 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/rmsg/rabbit.rb +7 -1
- data/lib/rmsg/task.rb +16 -0
- data/lib/rmsg/topic.rb +15 -0
- data/lib/rmsg/version.rb +1 -1
- data/rmsg.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d584ea38af8db2b4492bc2f4ac94b2cb9688e489
|
4
|
+
data.tar.gz: 51cb5b1e0d85825525be13e078757caadb5a5009
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27c5e065f5f75924352f4b1f774dcbcc0e26745a3854e07a6fab12162c313036070d5f14fe16ca1f3b0f773fcf8542c10dc55cd8b8d55dbf53cbffc0b2846cd5
|
7
|
+
data.tar.gz: 63703855f633d97edcc1d4a4b7db89aaf1ee5a36a4cc2ac07cae9cca6efe64e31bc881d526e0cedcd1328a5802cb8bccd9ef788f9034e2b7eb012c480c8f6c2b
|
data/lib/rmsg/rabbit.rb
CHANGED
@@ -1,13 +1,19 @@
|
|
1
1
|
module Rmsg
|
2
2
|
class Rabbit
|
3
|
-
|
3
|
+
# @return [Bunny::Connection]
|
4
|
+
attr_reader :connection
|
5
|
+
# @return [Bunny::Channel]
|
6
|
+
attr_reader :channel
|
4
7
|
|
8
|
+
# On creation holds references to RabbitMQ via
|
9
|
+
# a Bunny connection and a Bunny channel.
|
5
10
|
def initialize
|
6
11
|
@connection = Bunny.new
|
7
12
|
@connection.start
|
8
13
|
@channel = @connection.create_channel
|
9
14
|
end
|
10
15
|
|
16
|
+
# Close the channel and the connection to RabbitMQ.
|
11
17
|
def close
|
12
18
|
@channel.close
|
13
19
|
@connection.close
|
data/lib/rmsg/task.rb
CHANGED
@@ -1,14 +1,30 @@
|
|
1
1
|
module Rmsg
|
2
|
+
# Task handles publishing tasks and processing them.
|
2
3
|
class Task
|
4
|
+
# When initializing a task handler, the queue
|
5
|
+
# will be declared durable, to survive RabbitMQ restarts.
|
6
|
+
# @param params [Hash]
|
7
|
+
# * :rabbit [Rmsg::Rabbit] Example: Rmsg::Rabbit.new
|
8
|
+
# * :queue [String] Example: 'messages'
|
3
9
|
def initialize(params)
|
4
10
|
@rabbit = params[:rabbit]
|
5
11
|
@queue = @rabbit.channel.queue(params[:queue], durable: true)
|
6
12
|
end
|
7
13
|
|
14
|
+
# Publish a message in the tasks queue.
|
15
|
+
# It is marked a persistent to survive RabbitMQ restarts.
|
16
|
+
# @param message [Hash] The message to be consumed.
|
8
17
|
def publish(message)
|
9
18
|
@queue.publish(message.to_json, presistent: true)
|
10
19
|
end
|
11
20
|
|
21
|
+
# Subscribe to the tasks queue.
|
22
|
+
# Subscribing happens by continuously blocking the current process.
|
23
|
+
# It is specifically designed for long running processes.
|
24
|
+
# When receiving INT it will gracefully close.
|
25
|
+
# Consumer processes have a prefetch value of 1 for round-robin distribution.
|
26
|
+
# Consumer processes will send a manual ack after processing, to avoid losing tasks.
|
27
|
+
# @yield message [Hash] A block to process the message received.
|
12
28
|
def subscribe
|
13
29
|
@rabbit.channel.prefetch(1)
|
14
30
|
begin
|
data/lib/rmsg/topic.rb
CHANGED
@@ -1,14 +1,29 @@
|
|
1
1
|
module Rmsg
|
2
|
+
# Topic handles publishing and subscribing
|
3
|
+
# to a topic with a key, over RabbitMQ.
|
2
4
|
class Topic
|
5
|
+
# @param params [Hash]
|
6
|
+
# * :rabbit [Rmsg::Rabbit] Example: Rmsg::Rabbit.new
|
7
|
+
# * :topic [String] Example: 'services'
|
3
8
|
def initialize(params)
|
4
9
|
@rabbit = params[:rabbit]
|
5
10
|
@exchange = @rabbit.channel.topic(params[:topic])
|
6
11
|
end
|
7
12
|
|
13
|
+
# Publish a message with a routing key.
|
14
|
+
# @param message [Hash] Example: {id: 1, key: 'xxxccc'}
|
15
|
+
# @param key [String] Example: 'users.key_changed'
|
16
|
+
# @return [Exchange] The exchange used to publish.
|
8
17
|
def publish(message, key)
|
9
18
|
@exchange.publish(message.to_json, :routing_key => key)
|
10
19
|
end
|
11
20
|
|
21
|
+
# Subscribe to the topic, listening for a specific key.
|
22
|
+
# Subscribing happens by continuously blocking the current process.
|
23
|
+
# It is specifically designed for long running processes.
|
24
|
+
# When receiving INT it will gracefully close.
|
25
|
+
# @param key [String] Example: 'users.key_changed'
|
26
|
+
# @yield message [Hash] A block to process the message received.
|
12
27
|
def subscribe(key)
|
13
28
|
@queue = @rabbit.channel.queue("", :exclusive => true)
|
14
29
|
@queue.bind(@exchange, :routing_key => key)
|
data/lib/rmsg/version.rb
CHANGED
data/rmsg.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = "rmsg"
|
8
8
|
spec.version = Rmsg::VERSION
|
9
9
|
spec.authors = ["badshark"]
|
10
|
-
spec.email = ["
|
10
|
+
spec.email = ["marco@badshark.io"]
|
11
11
|
spec.summary = %q{RabbitMQ messaging.}
|
12
12
|
spec.description = %q{RabbitMQ messaging with topics and tasks. A thin, minimal layer on top of Bunny.}
|
13
13
|
spec.homepage = "https://github.com/badshark/rmsg"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rmsg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- badshark
|
@@ -69,7 +69,7 @@ dependencies:
|
|
69
69
|
description: RabbitMQ messaging with topics and tasks. A thin, minimal layer on top
|
70
70
|
of Bunny.
|
71
71
|
email:
|
72
|
-
-
|
72
|
+
- marco@badshark.io
|
73
73
|
executables: []
|
74
74
|
extensions: []
|
75
75
|
extra_rdoc_files: []
|