rservicebus 0.0.39 → 0.0.40

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,16 +6,16 @@ module RServiceBus
6
6
 
7
7
  #Host process for rservicebus
8
8
  class Host
9
-
9
+
10
10
  @handlerList
11
11
  @resourceByHandlerNameList
12
-
12
+
13
13
  @subscriptions
14
-
14
+
15
15
  @mq
16
-
16
+
17
17
  @appResources
18
-
18
+
19
19
  @config
20
20
 
21
21
  @subscriptionManager
@@ -34,13 +34,13 @@ module RServiceBus
34
34
  @appResources = ConfigureAppResource.new.getResources( ENV )
35
35
  return self;
36
36
  end
37
-
37
+
38
38
  def connectToMq
39
39
  @mq = ConfigureMQ.new.get( @config.mqHost + "/" + @config.localQueueName, @config.queueTimeout )
40
-
40
+
41
41
  return self
42
42
  end
43
-
43
+
44
44
  #Subscriptions are specified by adding events to the
45
45
  #msg endpoint mapping
46
46
  def sendSubscriptions
@@ -100,7 +100,7 @@ module RServiceBus
100
100
  def configureSubscriptions
101
101
  subscriptionStorage = ConfigureSubscriptionStorage.new.get( @config.appName, @config.subscriptionUri )
102
102
  @subscriptionManager = SubscriptionManager.new( subscriptionStorage )
103
-
103
+
104
104
  return self
105
105
  end
106
106
 
@@ -121,7 +121,7 @@ module RServiceBus
121
121
  .loadHandlerPathList()
122
122
  .loadLibs()
123
123
  .loadWorkingDirList();
124
-
124
+
125
125
  self.configureStatistics()
126
126
  .configureAppResource()
127
127
  .connectToMq()
@@ -151,9 +151,9 @@ module RServiceBus
151
151
  log "Waiting for messages. To exit press CTRL+C"
152
152
  statOutputCountdown = 0
153
153
  messageLoop = true
154
-
154
+ retries = @config.maxRetries
155
+
155
156
  while messageLoop do
156
- retries = @config.maxRetries
157
157
  #Popping a msg off the queue should not be in the message handler, as it affects retry
158
158
  begin
159
159
  if statOutputCountdown == 0 then
@@ -178,10 +178,10 @@ module RServiceBus
178
178
  @mq.ack
179
179
  rescue Exception => e
180
180
  sleep 0.5
181
-
181
+
182
182
  puts e.message
183
183
  puts e.backtrace
184
-
184
+
185
185
  tempHandlerList = Hash.new
186
186
  tempResourceList = Hash.new
187
187
  @handlerList[@msg.msg.class.name].each do |handler|
@@ -192,167 +192,171 @@ module RServiceBus
192
192
  end
193
193
  tempResourceList.each {|k,resource| resource.reconnect }
194
194
  tempHandlerList.each {|k,handler| @handlerLoader.setAppResources( handler ) }
195
-
196
-
197
- retry if (retries -= 1) > 0
198
-
199
- @stats.incTotalErrored
200
- if e.class.name == "Beanstalk::NotConnected" then
201
- puts "Lost connection to beanstalkd."
202
- puts "*** Start or Restart beanstalkd and try again."
203
- abort();
204
- end
205
-
206
- if e.class.name == "Redis::CannotConnectError" then
207
- puts "Lost connection to redis."
208
- puts "*** Start or Restart redis and try again."
209
- abort();
195
+
196
+ if retries > 0 then
197
+ retries = retries - 1
198
+ @mq.returnToQueue
199
+ else
200
+
201
+ @stats.incTotalErrored
202
+ if e.class.name == "Beanstalk::NotConnected" then
203
+ puts "Lost connection to beanstalkd."
204
+ puts "*** Start or Restart beanstalkd and try again."
205
+ abort();
206
+ end
207
+
208
+ if e.class.name == "Redis::CannotConnectError" then
209
+ puts "Lost connection to redis."
210
+ puts "*** Start or Restart redis and try again."
211
+ abort();
212
+ end
213
+
214
+ errorString = e.message + ". " + e.backtrace.join( ". " )
215
+ log errorString
216
+
217
+ @msg.addErrorMsg( @config.localQueueName, errorString )
218
+ serialized_object = YAML::dump(@msg)
219
+ self._SendAlreadyWrappedAndSerialised(serialized_object, @config.errorQueueName)
220
+ @mq.ack
221
+ retries = @config.maxRetries
210
222
  end
211
-
212
- errorString = e.message + ". " + e.backtrace.join( ". " )
213
- log errorString
214
-
215
- @msg.addErrorMsg( @config.localQueueName, errorString )
216
- serialized_object = YAML::dump(@msg)
217
- self._SendAlreadyWrappedAndSerialised(serialized_object, @config.errorQueueName)
218
- @mq.ack
219
223
  end
220
224
  rescue SystemExit, Interrupt
221
225
  puts "Exiting on request ..."
222
226
  messageLoop = false
223
-
227
+
224
228
  rescue NoMsgToProcess => e
225
229
  #This exception is just saying there are no messages to process
226
230
  statOutputCountdown = 0
227
231
  rescue Exception => e
228
232
  if e.message == "SIGTERM" then
229
- puts "Exiting on request ..."
230
- messageLoop = false
231
- else
232
- puts "*** This is really unexpected."
233
- messageLoop = false
234
- puts "Message: " + e.message
235
- puts e.backtrace
233
+ puts "Exiting on request ..."
234
+ messageLoop = false
235
+ else
236
+ puts "*** This is really unexpected."
237
+ messageLoop = false
238
+ puts "Message: " + e.message
239
+ puts e.backtrace
240
+ end
236
241
  end
237
242
  end
238
243
  end
239
- end
240
-
241
- #Send the current msg to the appropriate handlers
242
- def HandleMessage()
243
- msgName = @msg.msg.class.name
244
- handlerList = @handlerList[msgName]
245
244
 
246
- if handlerList == nil then
247
- log "No handler found for: " + msgName
248
- puts "No handler found for: " + msgName
249
- puts YAML::dump(@msg)
250
- raise "No Handler Found"
251
- else
252
- log "Handler found for: " + msgName, true
253
- handlerList.each do |handler|
254
- begin
255
- handler.Handle( @msg.msg )
256
- rescue Exception => e
257
- log "An error occured in Handler: " + handler.class.name
258
- log e.message + ". " + e.backtrace[0]
259
- raise e
245
+ #Send the current msg to the appropriate handlers
246
+ def HandleMessage()
247
+ msgName = @msg.msg.class.name
248
+ handlerList = @handlerList[msgName]
249
+
250
+ if handlerList == nil then
251
+ log "No handler found for: " + msgName
252
+ puts "No handler found for: " + msgName
253
+ puts YAML::dump(@msg)
254
+ raise "No Handler Found"
255
+ else
256
+ log "Handler found for: " + msgName, true
257
+ handlerList.each do |handler|
258
+ begin
259
+ handler.Handle( @msg.msg )
260
+ rescue Exception => e
261
+ log "An error occured in Handler: " + handler.class.name
262
+ log e.message + ". " + e.backtrace[0]
263
+ raise e
264
+ end
260
265
  end
261
266
  end
262
267
  end
263
- end
264
-
265
- #Sends a msg across the bus
266
- #
267
- # @param [String] serialized_object serialized RServiceBus::Message
268
- # @param [String] queueName endpoint to which the msg will be sent
269
- def _SendAlreadyWrappedAndSerialised( serialized_object, queueName )
270
- log "Bus._SendAlreadyWrappedAndSerialised", true
271
268
 
272
- if !@config.forwardSentMessagesTo.nil? then
273
- @mq.send( @config.forwardSentMessagesTo, serialized_object )
269
+ #Sends a msg across the bus
270
+ #
271
+ # @param [String] serialized_object serialized RServiceBus::Message
272
+ # @param [String] queueName endpoint to which the msg will be sent
273
+ def _SendAlreadyWrappedAndSerialised( serialized_object, queueName )
274
+ log "Bus._SendAlreadyWrappedAndSerialised", true
275
+
276
+ if !@config.forwardSentMessagesTo.nil? then
277
+ @mq.send( @config.forwardSentMessagesTo, serialized_object )
278
+ end
279
+
280
+ @mq.send( queueName, serialized_object )
274
281
  end
275
282
 
276
- @mq.send( queueName, serialized_object )
277
- end
278
-
279
- #Sends a msg across the bus
280
- #
281
- # @param [RServiceBus::Message] msg msg to be sent
282
- # @param [String] queueName endpoint to which the msg will be sent
283
- def _SendNeedsWrapping( msg, queueName )
284
- log "Bus._SendNeedsWrapping", true
285
-
286
- rMsg = RServiceBus::Message.new( msg, @config.localQueueName )
287
- serialized_object = YAML::dump(rMsg)
288
- log "Sending: " + msg.class.name + " to: " + queueName, true
289
- self._SendAlreadyWrappedAndSerialised( serialized_object, queueName )
290
- end
291
-
292
- #Sends a msg back across the bus
293
- #Reply queues are specified in each msg. It works like
294
- #email, where the reply address can actually be anywhere
295
- #
296
- # @param [RServiceBus::Message] msg msg to be sent
297
- def Reply( msg )
298
- log "Reply with: " + msg.class.name + " To: " + @msg.returnAddress, true
299
- @stats.incTotalReply
300
-
301
- self._SendNeedsWrapping( msg, @msg.returnAddress )
302
- end
303
-
304
-
305
- #Send a msg across the bus
306
- #msg destination is specified at the infrastructure level
307
- #
308
- # @param [RServiceBus::Message] msg msg to be sent
309
- def Send( msg )
310
- log "Bus.Send", true
311
- @stats.incTotalSent
312
-
313
- msgName = msg.class.name
314
- if @config.messageEndpointMappings.has_key?( msgName ) then
315
- queueName = @config.messageEndpointMappings[msgName]
316
- elsif !@handlerList[msgName].nil? then
317
- queueName = @config.localQueueName
318
- else
319
- log "No end point mapping found for: " + msgName
320
- log "**** Check environment variable MessageEndpointMappings contains an entry named : " + msgName
321
- raise "No end point mapping found for: " + msgName
283
+ #Sends a msg across the bus
284
+ #
285
+ # @param [RServiceBus::Message] msg msg to be sent
286
+ # @param [String] queueName endpoint to which the msg will be sent
287
+ def _SendNeedsWrapping( msg, queueName )
288
+ log "Bus._SendNeedsWrapping", true
289
+
290
+ rMsg = RServiceBus::Message.new( msg, @config.localQueueName )
291
+ serialized_object = YAML::dump(rMsg)
292
+ log "Sending: " + msg.class.name + " to: " + queueName, true
293
+ self._SendAlreadyWrappedAndSerialised( serialized_object, queueName )
322
294
  end
323
295
 
324
-
325
- self._SendNeedsWrapping( msg, queueName )
326
- end
327
-
328
- #Sends an event to all subscribers across the bus
329
- #
330
- # @param [RServiceBus::Message] msg msg to be sent
331
- def Publish( msg )
332
- log "Bus.Publish", true
333
- @stats.incTotalPublished
334
-
335
- subscriptions = @subscriptionManager.get(msg.class.name)
336
- subscriptions.each do |subscriber|
337
- self._SendNeedsWrapping( msg, subscriber )
296
+ #Sends a msg back across the bus
297
+ #Reply queues are specified in each msg. It works like
298
+ #email, where the reply address can actually be anywhere
299
+ #
300
+ # @param [RServiceBus::Message] msg msg to be sent
301
+ def Reply( msg )
302
+ log "Reply with: " + msg.class.name + " To: " + @msg.returnAddress, true
303
+ @stats.incTotalReply
304
+
305
+ self._SendNeedsWrapping( msg, @msg.returnAddress )
338
306
  end
339
307
 
340
- end
341
-
342
- #Sends a subscription request across the Bus
343
- #
344
- # @param [String] eventName event to be subscribes to
345
- def Subscribe( eventName )
346
- log "Bus.Subscribe: " + eventName, true
347
308
 
309
+ #Send a msg across the bus
310
+ #msg destination is specified at the infrastructure level
311
+ #
312
+ # @param [RServiceBus::Message] msg msg to be sent
313
+ def Send( msg )
314
+ log "Bus.Send", true
315
+ @stats.incTotalSent
316
+
317
+ msgName = msg.class.name
318
+ if @config.messageEndpointMappings.has_key?( msgName ) then
319
+ queueName = @config.messageEndpointMappings[msgName]
320
+ elsif !@handlerList[msgName].nil? then
321
+ queueName = @config.localQueueName
322
+ else
323
+ log "No end point mapping found for: " + msgName
324
+ log "**** Check environment variable MessageEndpointMappings contains an entry named : " + msgName
325
+ raise "No end point mapping found for: " + msgName
326
+ end
327
+
328
+
329
+ self._SendNeedsWrapping( msg, queueName )
330
+ end
348
331
 
349
- queueName = @config.messageEndpointMappings[eventName]
350
- subscription = Message_Subscription.new( eventName )
332
+ #Sends an event to all subscribers across the bus
333
+ #
334
+ # @param [RServiceBus::Message] msg msg to be sent
335
+ def Publish( msg )
336
+ log "Bus.Publish", true
337
+ @stats.incTotalPublished
338
+
339
+ subscriptions = @subscriptionManager.get(msg.class.name)
340
+ subscriptions.each do |subscriber|
341
+ self._SendNeedsWrapping( msg, subscriber )
342
+ end
343
+
344
+ end
351
345
 
346
+ #Sends a subscription request across the Bus
347
+ #
348
+ # @param [String] eventName event to be subscribes to
349
+ def Subscribe( eventName )
350
+ log "Bus.Subscribe: " + eventName, true
351
+
352
+
353
+ queueName = @config.messageEndpointMappings[eventName]
354
+ subscription = Message_Subscription.new( eventName )
355
+
356
+
357
+ self._SendNeedsWrapping( subscription, queueName )
358
+ end
352
359
 
353
- self._SendNeedsWrapping( subscription, queueName )
354
360
  end
355
361
 
356
362
  end
357
-
358
- end
@@ -12,7 +12,7 @@ module RServiceBus
12
12
  def connect( host, port )
13
13
  port ||= 11300
14
14
  string = "#{host}:#{port}"
15
-
15
+
16
16
  begin
17
17
  @beanstalk = Beanstalk::Pool.new([string])
18
18
  rescue Exception => e
@@ -47,6 +47,11 @@ module RServiceBus
47
47
  end
48
48
  return @job.body
49
49
  end
50
+
51
+ def returnToQueue
52
+ @job.release
53
+
54
+ end
50
55
 
51
56
  # "Commit" queue
52
57
  def ack
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rservicebus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.39
4
+ version: 0.0.40
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-21 00:00:00.000000000 Z
12
+ date: 2013-02-26 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A Ruby interpretation of NServiceBus
15
15
  email: guy@guyirvine.com