eventq_rabbitmq 1.13.0 → 1.14.0
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ffa54724256f83b66fec1203d2d7c378f507b1f
|
4
|
+
data.tar.gz: 8df00ee11ae9fd66f25ce064479492ab778aa96c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d476e366f439033b370b31ce9e5c3e642629e5ec24be6371a50f9bf0ab2503d356aa7139a500a4cf5e53ea21399de65eb102bc44fa44eb0c71097ff92532fdd
|
7
|
+
data.tar.gz: 58f26ad9602a576b7bd01b7732a38d2e06a9c10ce8ec01bb019a3f681939f1a87cfc203585d52965e7edc91ed8544f6ce12689f284f6ab4fafcdf75c3de27018
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module EventQ
|
2
2
|
module RabbitMq
|
3
|
+
# Implements a general interface to raise an event
|
4
|
+
# EventQ::Amazon::EventQClient is the sister-class which does the same for AWS
|
3
5
|
class EventQClient
|
4
6
|
|
5
7
|
def initialize(options={})
|
@@ -13,52 +15,102 @@ module EventQ
|
|
13
15
|
@event_raised_exchange = EventRaisedExchange.new
|
14
16
|
@serialization_manager = EventQ::SerializationProviders::Manager.new
|
15
17
|
@signature_manager = EventQ::SignatureProviders::Manager.new
|
18
|
+
|
19
|
+
#this array is used to record known event types
|
20
|
+
@known_event_types = []
|
16
21
|
end
|
17
22
|
|
18
|
-
def
|
23
|
+
def registered?(event_type)
|
24
|
+
@known_event_types.include?(event_type)
|
25
|
+
end
|
19
26
|
|
20
|
-
|
27
|
+
def register_event(event_type)
|
28
|
+
if registered?(event_type)
|
29
|
+
return true
|
30
|
+
end
|
31
|
+
|
32
|
+
@known_event_types << event_type
|
33
|
+
true
|
34
|
+
end
|
35
|
+
|
36
|
+
def raise_event(event_type, event)
|
37
|
+
register_event(event_type)
|
21
38
|
|
22
39
|
_event_type = EventQ.create_event_type(event_type)
|
23
40
|
|
24
|
-
|
25
|
-
|
41
|
+
with_connection do |channel|
|
42
|
+
exchange = @queue_manager.get_exchange(channel, @event_raised_exchange)
|
26
43
|
|
27
|
-
|
44
|
+
message = serialized_message(_event_type, event)
|
28
45
|
|
29
|
-
|
30
|
-
qm.content = event
|
31
|
-
qm.type = _event_type
|
46
|
+
exchange.publish(message, routing_key: _event_type)
|
32
47
|
|
33
|
-
|
34
|
-
provider = @signature_manager.get_provider(EventQ::Configuration.signature_provider)
|
35
|
-
qm.signature = provider.write(message: qm, secret: EventQ::Configuration.signature_secret)
|
48
|
+
EventQ.logger.debug "[#{self.class}] - Raised event. Message: #{message} | Type: #{event_type}."
|
36
49
|
end
|
50
|
+
end
|
37
51
|
|
38
|
-
|
52
|
+
def raise_event_in_queue(event_type, event, queue, delay)
|
53
|
+
register_event(event_type)
|
39
54
|
|
40
|
-
|
55
|
+
_event_type = EventQ.create_event_type(event_type)
|
41
56
|
|
42
|
-
|
43
|
-
|
57
|
+
with_connection do |channel|
|
58
|
+
exchange = @queue_manager.get_queue_exchange(channel, queue)
|
44
59
|
|
45
|
-
channel
|
46
|
-
|
47
|
-
|
48
|
-
|
60
|
+
delay_exchange = @queue_manager.get_delay_exchange(channel, queue, delay)
|
61
|
+
|
62
|
+
delay_queue = @queue_manager.create_delay_queue(channel, queue, exchange.name, delay)
|
63
|
+
delay_queue.bind(delay_exchange, routing_key: _event_type)
|
64
|
+
|
65
|
+
_queue_name = EventQ.create_queue_name(queue.name)
|
66
|
+
|
67
|
+
q = channel.queue(_queue_name, durable: @queue_manager.durable)
|
68
|
+
q.bind(exchange, routing_key: _event_type)
|
49
69
|
|
50
|
-
|
51
|
-
connection.close
|
70
|
+
message = serialized_message(_event_type, event)
|
52
71
|
|
53
|
-
|
72
|
+
delay_exchange.publish(message, routing_key: _event_type)
|
54
73
|
|
55
|
-
|
74
|
+
EventQ.logger.debug "[#{self.class}] - Raised event. Message: #{message} | Type: #{event_type} | Delay: #{delay}."
|
75
|
+
end
|
56
76
|
end
|
57
77
|
|
58
78
|
def new_message
|
59
79
|
EventQ::QueueMessage.new
|
60
80
|
end
|
61
81
|
|
82
|
+
private
|
83
|
+
|
84
|
+
def with_connection
|
85
|
+
connection = @client.get_connection
|
86
|
+
|
87
|
+
begin
|
88
|
+
channel = connection.create_channel
|
89
|
+
|
90
|
+
yield(channel)
|
91
|
+
|
92
|
+
ensure
|
93
|
+
channel&.close
|
94
|
+
connection.close
|
95
|
+
end
|
96
|
+
|
97
|
+
true
|
98
|
+
end
|
99
|
+
|
100
|
+
def serialized_message(event_type, event)
|
101
|
+
qm = new_message
|
102
|
+
qm.content = event
|
103
|
+
qm.type = event_type
|
104
|
+
|
105
|
+
if EventQ::Configuration.signature_secret != nil
|
106
|
+
provider = @signature_manager.get_provider(EventQ::Configuration.signature_provider)
|
107
|
+
qm.signature = provider.write(message: qm, secret: EventQ::Configuration.signature_secret)
|
108
|
+
end
|
109
|
+
|
110
|
+
serialization_provider = @serialization_manager.get_provider(EventQ::Configuration.serialization_provider)
|
111
|
+
|
112
|
+
serialization_provider.serialize(qm)
|
113
|
+
end
|
62
114
|
end
|
63
115
|
end
|
64
116
|
end
|
@@ -32,6 +32,11 @@ module EventQ
|
|
32
32
|
return q
|
33
33
|
end
|
34
34
|
|
35
|
+
def get_queue_exchange(channel, queue)
|
36
|
+
_exchange_name = EventQ.create_exchange_name(queue.name)
|
37
|
+
channel.direct("#{_exchange_name}.ex")
|
38
|
+
end
|
39
|
+
|
35
40
|
def get_retry_exchange(channel, queue)
|
36
41
|
_queue_name = EventQ.create_queue_name(queue.name)
|
37
42
|
return channel.fanout("#{_queue_name}.r.ex")
|
@@ -42,6 +47,11 @@ module EventQ
|
|
42
47
|
return channel.fanout("#{_queue_name}.ex")
|
43
48
|
end
|
44
49
|
|
50
|
+
def get_delay_exchange(channel, queue, delay)
|
51
|
+
_queue_name = EventQ.create_queue_name(queue.name)
|
52
|
+
channel.direct("#{_queue_name}.#{delay}.d.ex")
|
53
|
+
end
|
54
|
+
|
45
55
|
def get_retry_queue(channel, queue)
|
46
56
|
subscriber_exchange = get_subscriber_exchange(channel, queue)
|
47
57
|
|
@@ -63,11 +73,16 @@ module EventQ
|
|
63
73
|
|
64
74
|
end
|
65
75
|
|
76
|
+
def create_delay_queue(channel, queue, dlx_name, delay=0)
|
77
|
+
queue_name = EventQ.create_queue_name(queue.name)
|
78
|
+
channel.queue("#{queue_name}.#{delay}.delay", durable: @durable,
|
79
|
+
arguments: { X_DEAD_LETTER_EXCHANGE => dlx_name, X_MESSAGE_TTL => delay * 1000 })
|
80
|
+
end
|
81
|
+
|
66
82
|
def get_exchange(channel, exchange)
|
67
83
|
_exchange_name = EventQ.create_exchange_name(exchange.name)
|
68
84
|
return channel.direct(_exchange_name, :durable => @durable)
|
69
85
|
end
|
70
|
-
|
71
86
|
end
|
72
87
|
end
|
73
88
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eventq_rabbitmq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- vaughanbrittonsage
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|