bug_bunny 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +34 -2
- data/lib/bug_bunny/railtie.rb +124 -0
- data/lib/bug_bunny/version.rb +1 -1
- data/lib/bug_bunny.rb +5 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e955f527c2414c898f4bb9fa0f5584b59d112492edde985e41aad43dd9531795
|
4
|
+
data.tar.gz: 14bd2be642714c1a275a2e2a57d7a1c96caf386162af7403b888031a76eaab4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7e81ea70ee7b358befc49b4165a37556fb28fe18fdab973f1a8e5faaa2d253138f0424651965a54ed251a8043e4de7b85810d06cc4e1929ef80db412877f709
|
7
|
+
data.tar.gz: c55269bbf9612e22d20a39784f4d8b03f05a501c5b3833d4b7f56bf0d377c300ce833a369d7c82663d09ab2b49b9cf3572c20a2d9c8f73d57de097414bef7727
|
data/README.md
CHANGED
@@ -1,8 +1,40 @@
|
|
1
1
|
# BugBunny
|
2
2
|
|
3
|
-
|
3
|
+
This gem simplify use of bunny gem. You can use 2 types of comunitaction, sync and async, Only is necessary define one `Adapter` to publish messages and `Consumer` to consume messages.
|
4
|
+
|
5
|
+
# Example
|
6
|
+
|
7
|
+
```
|
8
|
+
# Adapter Code
|
9
|
+
class TestAdapter < ::BugBunny::Adapter
|
10
|
+
def self.publish_and_consume
|
11
|
+
service_adapter = TestAdapter.new
|
12
|
+
sync_queue = service_adapter.build_queue(:queue_test, durable: true, exclusive: false, auto_delete: false)
|
13
|
+
|
14
|
+
message = ::BugBunny::Message.new(service_action: :test_action, body: { msg: 'test message' })
|
15
|
+
|
16
|
+
service_adapter.publish_and_consume!(message, sync_queue, check_consumers_count: false)
|
17
|
+
|
18
|
+
service_adapter.close_connection! # ensure the adapter is close
|
19
|
+
|
20
|
+
service_adapter.make_response
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Controller Code
|
25
|
+
class TestController < ::BugBunny::Controller
|
26
|
+
##############################################################################
|
27
|
+
# SYNC SERVICE ACTIONS
|
28
|
+
##############################################################################
|
29
|
+
def self.test_action(message)
|
30
|
+
puts 'sleeping 5 seconds...'
|
31
|
+
sleep 5
|
32
|
+
{ status: :success, body: message.body }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
```
|
36
|
+
|
4
37
|
|
5
|
-
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/bug_bunny`. To experiment with that code, run `bin/console` for an interactive prompt.
|
6
38
|
|
7
39
|
## Installation
|
8
40
|
|
@@ -0,0 +1,124 @@
|
|
1
|
+
module BugBunny
|
2
|
+
class Railtie < Rails::Railtie
|
3
|
+
rake_tasks do
|
4
|
+
namespace :bug_bunny do |args|
|
5
|
+
ARGV.shift
|
6
|
+
|
7
|
+
desc 'Bug Bunny consumer'
|
8
|
+
# environment is required to have access to Rails models
|
9
|
+
task consumer: :environment do
|
10
|
+
options = {}
|
11
|
+
|
12
|
+
o = OptionParser.new
|
13
|
+
|
14
|
+
o.banner = "Usage: rake bug_bunny:consumer [options]"
|
15
|
+
o.on("-a ADAPTER", "--adapter ADAPTER") { |adapter| options[:adapter] = adapter }
|
16
|
+
o.on("-s", "--session") { options[:session] = true }
|
17
|
+
o.on("-m MODE", "--mode MODE", "Sync or Async mode. values [:sync, :async]") { |mode| options[:mode] = mode }
|
18
|
+
o.on("-h", "--help", 'HELP ME!!! HELPE ME!!!') { puts o }
|
19
|
+
|
20
|
+
args = o.order!(ARGV) {}
|
21
|
+
|
22
|
+
o.parse!(args)
|
23
|
+
|
24
|
+
if defined?(Rails)
|
25
|
+
Rails.logger.info("Initializing #{options}")
|
26
|
+
else
|
27
|
+
puts "Initializing #{options}"
|
28
|
+
end
|
29
|
+
|
30
|
+
adapter_class = options[:adapter].constantize
|
31
|
+
|
32
|
+
mode = options[:mode].to_sym || :sync
|
33
|
+
|
34
|
+
queue_name = { sync: adapter_class::ROUTING_KEY_SYNC_REQUEST, async: adapter_class::ROUTING_KEY_ASYNC_REQUEST }[mode]
|
35
|
+
|
36
|
+
loop do
|
37
|
+
begin
|
38
|
+
adapter = adapter_class.new
|
39
|
+
|
40
|
+
queue = adapter.build_queue(queue_name, adapter_class::QUEUES_PROPS[queue_name])
|
41
|
+
|
42
|
+
if mode == :async
|
43
|
+
adapter.build_queue(
|
44
|
+
adapter_class::ROUTING_KEY_ASYNC_RESPONSE,
|
45
|
+
adapter_class::QUEUES_PROPS[adapter_class::ROUTING_KEY_ASYNC_RESPONSE]
|
46
|
+
)
|
47
|
+
end
|
48
|
+
rescue ::BugBunny::Exception::ComunicationRabbitError => e
|
49
|
+
if defined?(Rails)
|
50
|
+
Rails.logger.error(e)
|
51
|
+
else
|
52
|
+
puts e.message
|
53
|
+
end
|
54
|
+
|
55
|
+
(adapter ||= nil).try(:close_connection!) # ensure the adapter is close
|
56
|
+
sleep 5
|
57
|
+
retry
|
58
|
+
end
|
59
|
+
|
60
|
+
adapter.consume!(queue) do |message|
|
61
|
+
begin
|
62
|
+
if options[:session]
|
63
|
+
::Session.request_id = message.correlation_id rescue nil
|
64
|
+
::Session.tags_context ||= {}
|
65
|
+
|
66
|
+
::Session.extra_context ||= {}
|
67
|
+
::Session.extra_context[:message] = message.body
|
68
|
+
end
|
69
|
+
|
70
|
+
response = nil
|
71
|
+
|
72
|
+
Timeout.timeout(5.minutes) do
|
73
|
+
if defined?(Rails)
|
74
|
+
Rails.logger.debug("Msg received: action: #{message.service_action}, msg: #{message.body}")
|
75
|
+
else
|
76
|
+
puts "Msg received: action: #{message.service_action}, msg: #{message.body}"
|
77
|
+
end
|
78
|
+
response = "#{options[:adapter]}Controller".constantize.exec_action(message)
|
79
|
+
end
|
80
|
+
rescue Timeout::Error => e
|
81
|
+
puts("[OLT_VSOL_SERVICE][TIMEOUT][CONSUMER] #{e.to_s})")
|
82
|
+
@exception = e
|
83
|
+
rescue StandardError => e
|
84
|
+
adapter.check_pg_exception!(e)
|
85
|
+
if defined?(Rails)
|
86
|
+
Rails.logger.error(e)
|
87
|
+
else
|
88
|
+
puts e.message
|
89
|
+
end
|
90
|
+
@exception = e
|
91
|
+
end
|
92
|
+
|
93
|
+
if message.reply_to
|
94
|
+
Session.reply_to_queue = message.reply_to if options[:session]
|
95
|
+
begin
|
96
|
+
msg = message.build_message
|
97
|
+
if @exception
|
98
|
+
msg.body = (response&.key?(:body)) ? response[:body] : { id: message.body[:id] }
|
99
|
+
msg.exception = @exception
|
100
|
+
@exception = nil
|
101
|
+
else
|
102
|
+
msg.body = response[:body]
|
103
|
+
msg.status = response[:status] if response.key?(:status)
|
104
|
+
end
|
105
|
+
|
106
|
+
queue = adapter.build_queue(message.reply_to, initialize: false)
|
107
|
+
adapter.publish!(msg, queue)
|
108
|
+
rescue => e
|
109
|
+
if defined?(Rails)
|
110
|
+
Rails.logger.error(e)
|
111
|
+
else
|
112
|
+
puts e.message
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
Session.clean! if options[:session]
|
117
|
+
end
|
118
|
+
sleep 5
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
data/lib/bug_bunny/version.rb
CHANGED
data/lib/bug_bunny.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bug_bunny
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- gabix
|
@@ -58,6 +58,7 @@ files:
|
|
58
58
|
- lib/bug_bunny/message.rb
|
59
59
|
- lib/bug_bunny/queue.rb
|
60
60
|
- lib/bug_bunny/rabbit.rb
|
61
|
+
- lib/bug_bunny/railtie.rb
|
61
62
|
- lib/bug_bunny/response.rb
|
62
63
|
- lib/bug_bunny/security.rb
|
63
64
|
- lib/bug_bunny/version.rb
|