fmq 0.3.2 → 0.3.3
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.
- data/History.txt +7 -0
- data/README.txt +2 -2
- data/lib/fmq/queues/round_robin.rb +91 -0
- data/lib/fmq/server.rb +2 -0
- data/lib/fmq/version.rb +1 -1
- metadata +3 -2
data/History.txt
CHANGED
data/README.txt
CHANGED
@@ -25,8 +25,8 @@ The client apis are implemented using the HTTP protocol, so that you can
|
|
25
25
|
use even curl to receive messages. A client library for ruby is implemented
|
26
26
|
right now, other languages will follow.
|
27
27
|
|
28
|
-
The queue itself is a RESTful url like
|
29
|
-
or
|
28
|
+
The queue itself is a RESTful url like http://localhost:5884/myQueueName/
|
29
|
+
or http://localhost:5884/myApplication/myQueueName/. If you do a GET request
|
30
30
|
to this url with a web browser you will receive one message from the queue.
|
31
31
|
|
32
32
|
== FEATURES/PROBLEMS:
|
@@ -0,0 +1,91 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2008 Vincent Landgraf
|
3
|
+
#
|
4
|
+
# This file is part of the Free Message Queue.
|
5
|
+
#
|
6
|
+
# Free Message Queue is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# Free Message Queue is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with Free Message Queue. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#
|
19
|
+
require File.dirname(__FILE__) + '/base'
|
20
|
+
|
21
|
+
module FreeMessageQueue
|
22
|
+
# This queue distributes the polls and puts to different queues. It uses a round robin, so each queue
|
23
|
+
# will be called in order every time. E.g. if you have three queues specified in the redirect_to
|
24
|
+
# statement and use the poll method it will poll the first queue. If you poll the second time the RoundRobinQueue
|
25
|
+
# will poll the second queue and if you poll the fourth time the RoundRobinQueue will again poll the first queue.
|
26
|
+
#
|
27
|
+
# queue_manager = FreeMessageQueue::QueueManager.new(true) do
|
28
|
+
# setup_queue "/fmq_test/test1", FreeMessageQueue::RoundRobinQueue do |q|
|
29
|
+
# q.redirect_to ["/fmq_test/test1", "/fmq_test/test2"]
|
30
|
+
# # one can optionally configure what methods are allowed
|
31
|
+
# # by default it is [:put, :poll]
|
32
|
+
# q.allow :poll
|
33
|
+
# end
|
34
|
+
# end
|
35
|
+
class RoundRobinQueue < BaseQueue
|
36
|
+
def initialize(manager)
|
37
|
+
super(manager)
|
38
|
+
@allow = [:poll, :put]
|
39
|
+
@queue_index = -1 # as starting point will be 0 later by using next_queue
|
40
|
+
end
|
41
|
+
|
42
|
+
def poll
|
43
|
+
if allowed? :poll
|
44
|
+
manager.poll(@redirect_to[next_queue])
|
45
|
+
else
|
46
|
+
raise QueueException.new("[RoundRobinQueue] you can't poll from this queue", caller)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def put(message)
|
51
|
+
if allowed? :put
|
52
|
+
manager.put(@redirect_to[next_queue], message)
|
53
|
+
else
|
54
|
+
raise QueueException.new("[RoundRobinQueue] you can't put to this queue", caller)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# *CONFIGURATION* *OPTION*
|
59
|
+
# allow actions *:put* or *:poll*. You can pass and array for both (*[:poll, :put]*) or just one *:put*
|
60
|
+
def allow(val)
|
61
|
+
@allow = val
|
62
|
+
end
|
63
|
+
|
64
|
+
# *CONFIGURATION* *OPTION*
|
65
|
+
# specifiy the queues that should be used (must be an array)
|
66
|
+
def redirect_to(val)
|
67
|
+
@redirect_to = val
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
# returns the index of the next queue
|
73
|
+
# (this is the round robin)
|
74
|
+
def next_queue
|
75
|
+
if @queue_index + 1 < @redirect_to.size
|
76
|
+
@queue_index += 1
|
77
|
+
else
|
78
|
+
@queue_index = 0
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# is this method (put, poll) allowed
|
83
|
+
def allowed? (method)
|
84
|
+
if @allow.respond_to? :each
|
85
|
+
@allow.include method
|
86
|
+
else
|
87
|
+
@allow == method
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
data/lib/fmq/server.rb
CHANGED
@@ -41,6 +41,8 @@ module FreeMessageQueue
|
|
41
41
|
response = client_exception(request, queue_path,
|
42
42
|
ArgumentError.new("[Server] Method is not supported '#{method}'"))
|
43
43
|
end
|
44
|
+
rescue QueueException => ex
|
45
|
+
response = client_exception(request, queue_path, ex)
|
44
46
|
rescue QueueManagerException => ex
|
45
47
|
response = client_exception(request, queue_path, ex)
|
46
48
|
end
|
data/lib/fmq/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fmq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vincent Landgraf
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-09-02 00:00:00 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -74,6 +74,7 @@ files:
|
|
74
74
|
- lib/fmq/queues/load_balanced.rb
|
75
75
|
- lib/fmq/queues/syncronized.rb
|
76
76
|
- lib/fmq/queues/file_persistent.rb
|
77
|
+
- lib/fmq/queues/round_robin.rb
|
77
78
|
- lib/fmq/version.rb
|
78
79
|
- test/test_basic.rb
|
79
80
|
- test/test_fmq_client.rb
|