qup 1.4.0 → 1.4.1

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.
@@ -1,167 +0,0 @@
1
- = qup - Queue Up
2
-
3
- * http://github.com/copiousfreetime/qup
4
-
5
- == DESCRIPTION
6
-
7
- Qup is a generalized API for Message Queue and Publish/Subscribe messaging
8
- patterns with the ability to plug in an appropriate messaging infrastructure
9
- based upon your needs.
10
-
11
- Qup ships with support for {Kestrel}[https://github.com/robey/kestrel],
12
- {Redis}[http://redis.io], and a filesystem infrastructure based on
13
- {Maildir}[https://rubygems.org/gems/maildir]. Additional Adapters will be
14
- developed as needs arise. {Please submit an
15
- Issue}[https://github.com/copiousfreetime/qup/issues] to have a new Adapter
16
- created. Pull requests gladly accepted.
17
-
18
- == FEATURES
19
-
20
- Qup provides an abstract implementation of two common messaging patterns.
21
-
22
- [Basic Message Queue]
23
-
24
- Examples of a basic message queue are {Work/Task
25
- Queues}[http://www.rabbitmq.com/tutorials/tutorial-two-python.html], {JMS
26
- Queue}[http://docs.oracle.com/javaee/6/api/javax/jms/Queue.html], or {Amazon
27
- SQS}[http://aws.amazon.com/sqs/]. This is a pattern where one or more
28
- Producers puts Messages on a Queue and one or more Consumers received those
29
- Messages. Each Message is delivered only 1 time to a Consumer.
30
-
31
- [Publish/Subscribe]
32
-
33
- {Wikipedia Article on Pub/Sub
34
- pattern}[http://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern].
35
-
36
- Qup implements a Topic based system, where Publishers send Messages on a Topic
37
- and all Subscribers to that topic each receive their own copy of the message.
38
-
39
- Qup assumes that the messaging systems it has adapters for provided durable and
40
- acknowledgeable messaging.
41
-
42
- [Durability]
43
-
44
- When message is sent to the messaging system by Qup, the message is persisted to
45
- disk.
46
-
47
- [Acknowledgeable Messages]
48
-
49
- When a Consumer receives a Message, and then processes it, Qup assumes that
50
- the messaging infrastructure requires that the Message be positively
51
- acknowledged. In other words, if the Consumer does not acknowledge the message
52
- then the messages infrastructure will put the Message back onto the Queue.
53
-
54
- == SYNOPSIS
55
-
56
- === Basic Message Queue
57
-
58
- session = Qup::Session.new( "maildir:///tmp/test-queue" )
59
- queue = session.queue( 'basic-messaging' )
60
- producer = queue.producer
61
-
62
- consumer_1 = queue.consumer
63
- consumer_2 = queue.consumer
64
-
65
- producer.produce( 'message_1' )
66
- producer.produce( 'message_2' )
67
-
68
- message_1 = consumer_1.consume
69
- puts message_1.data # => 'message_1'
70
- consumer_1.acknowledge( message_1 )
71
-
72
- consumer_2.consume do |message_2|
73
- puts message_2.data # => 'message_2'
74
- end # auto acknowledged at the end of the block
75
-
76
- === Publish/Subscribe
77
-
78
- session = Qup::Session.new( "kestrel://messaging.example.com:22133" )
79
- topic = session.topic( 'topic-messaging' )
80
- publisher = topic.publisher
81
-
82
- subscribers = []
83
- 3.times do |n|
84
- subscribers << topic.subscriber( "subscriber-#{n}" )
85
- end
86
-
87
- publisher.publish( 'a fine message on a topic' )
88
-
89
- subscribers.each do |sub|
90
- sub.consume do |msg|
91
- puts msg.data # => 'a fine message on a topic'
92
- end # auto acknowledge an end of block
93
- end
94
-
95
- == REQUIREMENTS
96
-
97
- Depending on the backend messaging system you want to use, you'll need to
98
- install additional gems. At the current moment, these are the supported
99
- messaging backends.
100
-
101
- * Qup::Adapter::Maildir - built in and uses the 'maildir' gem
102
- * Qup::Adapter::Kestrel - uses the 'kjess' gem
103
- * Qup::Adapter::Redis - uses the 'redis' gem
104
-
105
- == INSTALL
106
-
107
- * gem install qup
108
-
109
- == DEVELOPERS
110
-
111
- After checking out the source, run:
112
-
113
- $ rake develop
114
-
115
- This task will install any missing dependencies. You may then run:
116
-
117
- $ rake test
118
-
119
- Other tasks are viewable with
120
-
121
- $ rake -T
122
-
123
- === Kestrel
124
-
125
- To run the Kestrel tests you will need:
126
-
127
- * gem install kjess
128
- * A Kestrel server running on <tt>localhost:22133</tt>
129
-
130
- You can download Kestrel from http://robey.github.com/kestrel/ and then run the
131
- +scripts/devel.sh+ command and you will have a default Kestrel server running on
132
- <tt>localhost:22133</tt>. This will be enough to run the kestrel tests.
133
-
134
- === Redis
135
-
136
- To run the Redis tests you will need:
137
-
138
- * gem install redis
139
- * A Redis server running on <tt>localhost:6479</tt>
140
-
141
- You can download redis using brew, macports or your favorite linux package
142
- manager.
143
-
144
- == LICENSE
145
-
146
- (The ISC LICENSE)
147
-
148
- Copyright (c) 2012 Jeremy Hinegardner
149
-
150
- Permission is hereby granted, free of charge, to any person obtaining
151
- a copy of this software and associated documentation files (the
152
- 'Software'), to deal in the Software without restriction, including
153
- without limitation the rights to use, copy, modify, merge, publish,
154
- distribute, sublicense, and/or sell copies of the Software, and to
155
- permit persons to whom the Software is furnished to do so, subject to
156
- the following conditions:
157
-
158
- The above copyright notice and this permission notice shall be
159
- included in all copies or substantial portions of the Software.
160
-
161
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
162
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
163
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
164
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
165
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
166
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
167
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.