smart_message 0.0.7 → 0.0.9
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 +4 -4
- data/.gitignore +1 -0
- data/.irbrc +24 -0
- data/CHANGELOG.md +143 -0
- data/Gemfile.lock +6 -1
- data/README.md +289 -15
- data/docs/README.md +3 -1
- data/docs/addressing.md +119 -13
- data/docs/architecture.md +68 -0
- data/docs/dead_letter_queue.md +673 -0
- data/docs/dispatcher.md +87 -0
- data/docs/examples.md +59 -1
- data/docs/getting-started.md +8 -1
- data/docs/logging.md +382 -326
- data/docs/message_filtering.md +451 -0
- data/examples/01_point_to_point_orders.rb +54 -53
- data/examples/02_publish_subscribe_events.rb +14 -10
- data/examples/03_many_to_many_chat.rb +16 -8
- data/examples/04_redis_smart_home_iot.rb +20 -10
- data/examples/05_proc_handlers.rb +12 -11
- data/examples/06_custom_logger_example.rb +95 -100
- data/examples/07_error_handling_scenarios.rb +4 -2
- data/examples/08_entity_addressing_basic.rb +18 -6
- data/examples/08_entity_addressing_with_filtering.rb +27 -9
- data/examples/09_dead_letter_queue_demo.rb +559 -0
- data/examples/09_regex_filtering_microservices.rb +407 -0
- data/examples/10_header_block_configuration.rb +263 -0
- data/examples/11_global_configuration_example.rb +219 -0
- data/examples/README.md +102 -0
- data/examples/dead_letters.jsonl +12 -0
- data/examples/performance_metrics/benchmark_results_ractor_20250818_205603.json +135 -0
- data/examples/performance_metrics/benchmark_results_ractor_20250818_205831.json +135 -0
- data/examples/performance_metrics/benchmark_results_test_20250818_204942.json +130 -0
- data/examples/performance_metrics/benchmark_results_threadpool_20250818_204942.json +130 -0
- data/examples/performance_metrics/benchmark_results_threadpool_20250818_204959.json +130 -0
- data/examples/performance_metrics/benchmark_results_threadpool_20250818_205044.json +130 -0
- data/examples/performance_metrics/benchmark_results_threadpool_20250818_205109.json +130 -0
- data/examples/performance_metrics/benchmark_results_threadpool_20250818_205252.json +130 -0
- data/examples/performance_metrics/benchmark_results_unknown_20250819_172852.json +130 -0
- data/examples/performance_metrics/compare_benchmarks.rb +519 -0
- data/examples/performance_metrics/dead_letters.jsonl +3100 -0
- data/examples/performance_metrics/performance_benchmark.rb +344 -0
- data/examples/show_logger.rb +367 -0
- data/examples/show_me.rb +145 -0
- data/examples/temp.txt +94 -0
- data/examples/tmux_chat/bot_agent.rb +4 -2
- data/examples/tmux_chat/human_agent.rb +4 -2
- data/examples/tmux_chat/room_monitor.rb +4 -2
- data/examples/tmux_chat/shared_chat_system.rb +6 -3
- data/lib/smart_message/addressing.rb +259 -0
- data/lib/smart_message/base.rb +121 -599
- data/lib/smart_message/circuit_breaker.rb +23 -6
- data/lib/smart_message/configuration.rb +199 -0
- data/lib/smart_message/dead_letter_queue.rb +361 -0
- data/lib/smart_message/dispatcher.rb +90 -49
- data/lib/smart_message/header.rb +5 -0
- data/lib/smart_message/logger/base.rb +21 -1
- data/lib/smart_message/logger/default.rb +88 -138
- data/lib/smart_message/logger/lumberjack.rb +324 -0
- data/lib/smart_message/logger/null.rb +81 -0
- data/lib/smart_message/logger.rb +17 -9
- data/lib/smart_message/messaging.rb +100 -0
- data/lib/smart_message/plugins.rb +132 -0
- data/lib/smart_message/serializer/base.rb +25 -8
- data/lib/smart_message/serializer/json.rb +5 -4
- data/lib/smart_message/subscription.rb +193 -0
- data/lib/smart_message/transport/base.rb +84 -53
- data/lib/smart_message/transport/memory_transport.rb +7 -5
- data/lib/smart_message/transport/redis_transport.rb +15 -45
- data/lib/smart_message/transport/stdout_transport.rb +18 -8
- data/lib/smart_message/transport.rb +1 -34
- data/lib/smart_message/utilities.rb +142 -0
- data/lib/smart_message/version.rb +1 -1
- data/lib/smart_message/versioning.rb +85 -0
- data/lib/smart_message/wrapper.rb.bak +132 -0
- data/lib/smart_message.rb +74 -27
- data/smart_message.gemspec +3 -0
- metadata +77 -3
- data/lib/smart_message/serializer.rb +0 -10
- data/lib/smart_message/wrapper.rb +0 -43
@@ -62,7 +62,8 @@ class SmartMessage::Logger::FileLogger < SmartMessage::Logger::Base
|
|
62
62
|
@log_file_path = log_file_path
|
63
63
|
|
64
64
|
# Ensure log directory exists
|
65
|
-
|
65
|
+
log_dir = File.dirname(@log_file_path)
|
66
|
+
FileUtils.mkdir_p(log_dir) unless Dir.exist?(log_dir)
|
66
67
|
|
67
68
|
# This is Ruby's standard Logger class from the 'logger' library
|
68
69
|
# You could replace this with Rails.logger or any other logger:
|
@@ -76,24 +77,25 @@ class SmartMessage::Logger::FileLogger < SmartMessage::Logger::Base
|
|
76
77
|
end
|
77
78
|
end
|
78
79
|
|
79
|
-
|
80
|
-
|
80
|
+
# Standard logging methods
|
81
|
+
def debug(message = nil, &block)
|
82
|
+
@logger.debug(message || block.call)
|
81
83
|
end
|
82
84
|
|
83
|
-
def
|
84
|
-
@logger.info(
|
85
|
+
def info(message = nil, &block)
|
86
|
+
@logger.info(message || block.call)
|
85
87
|
end
|
86
88
|
|
87
|
-
def
|
88
|
-
@logger.
|
89
|
+
def warn(message = nil, &block)
|
90
|
+
@logger.warn(message || block.call)
|
89
91
|
end
|
90
92
|
|
91
|
-
def
|
92
|
-
@logger.
|
93
|
+
def error(message = nil, &block)
|
94
|
+
@logger.error(message || block.call)
|
93
95
|
end
|
94
96
|
|
95
|
-
def
|
96
|
-
@logger.
|
97
|
+
def fatal(message = nil, &block)
|
98
|
+
@logger.fatal(message || block.call)
|
97
99
|
end
|
98
100
|
end
|
99
101
|
|
@@ -105,54 +107,47 @@ class SmartMessage::Logger::JSONLogger < SmartMessage::Logger::Base
|
|
105
107
|
@log_file_path = log_file_path
|
106
108
|
|
107
109
|
# Ensure log directory exists
|
108
|
-
|
110
|
+
log_dir = File.dirname(@log_file_path)
|
111
|
+
FileUtils.mkdir_p(log_dir) unless Dir.exist?(log_dir)
|
109
112
|
end
|
110
113
|
|
111
|
-
|
114
|
+
# Standard logging methods with JSON output
|
115
|
+
def debug(message = nil, &block)
|
112
116
|
write_log_entry({
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
timestamp: Time.now.iso8601,
|
117
|
-
data: message.to_h
|
117
|
+
level: 'DEBUG',
|
118
|
+
message: message || block&.call,
|
119
|
+
timestamp: Time.now.iso8601
|
118
120
|
})
|
119
121
|
end
|
120
122
|
|
121
|
-
def
|
123
|
+
def info(message = nil, &block)
|
122
124
|
write_log_entry({
|
123
|
-
|
124
|
-
|
125
|
-
message_id: message._sm_header&.message_id,
|
126
|
-
transport: transport.class.name,
|
125
|
+
level: 'INFO',
|
126
|
+
message: message || block&.call,
|
127
127
|
timestamp: Time.now.iso8601
|
128
128
|
})
|
129
129
|
end
|
130
130
|
|
131
|
-
def
|
131
|
+
def warn(message = nil, &block)
|
132
132
|
write_log_entry({
|
133
|
-
|
134
|
-
|
135
|
-
payload_size: payload.length,
|
133
|
+
level: 'WARN',
|
134
|
+
message: message || block&.call,
|
136
135
|
timestamp: Time.now.iso8601
|
137
136
|
})
|
138
137
|
end
|
139
138
|
|
140
|
-
def
|
139
|
+
def error(message = nil, &block)
|
141
140
|
write_log_entry({
|
142
|
-
|
143
|
-
|
144
|
-
result: result.to_s,
|
141
|
+
level: 'ERROR',
|
142
|
+
message: message || block&.call,
|
145
143
|
timestamp: Time.now.iso8601
|
146
144
|
})
|
147
145
|
end
|
148
146
|
|
149
|
-
def
|
147
|
+
def fatal(message = nil, &block)
|
150
148
|
write_log_entry({
|
151
|
-
|
152
|
-
message: message
|
153
|
-
error_class: error.class.name,
|
154
|
-
error_message: error.message,
|
155
|
-
backtrace: error.backtrace&.first(5),
|
149
|
+
level: 'FATAL',
|
150
|
+
message: message || block&.call,
|
156
151
|
timestamp: Time.now.iso8601
|
157
152
|
})
|
158
153
|
end
|
@@ -168,24 +163,24 @@ end
|
|
168
163
|
|
169
164
|
# Console Logger with Emoji Implementation
|
170
165
|
class SmartMessage::Logger::EmojiConsoleLogger < SmartMessage::Logger::Base
|
171
|
-
def
|
172
|
-
puts "
|
166
|
+
def debug(message = nil, &block)
|
167
|
+
puts "🐛 DEBUG: #{message || block&.call}"
|
173
168
|
end
|
174
169
|
|
175
|
-
def
|
176
|
-
puts "
|
170
|
+
def info(message = nil, &block)
|
171
|
+
puts "ℹ️ INFO: #{message || block&.call}"
|
177
172
|
end
|
178
173
|
|
179
|
-
def
|
180
|
-
puts "
|
174
|
+
def warn(message = nil, &block)
|
175
|
+
puts "⚠️ WARN: #{message || block&.call}"
|
181
176
|
end
|
182
177
|
|
183
|
-
def
|
184
|
-
puts "
|
178
|
+
def error(message = nil, &block)
|
179
|
+
puts "❌ ERROR: #{message || block&.call}"
|
185
180
|
end
|
186
181
|
|
187
|
-
def
|
188
|
-
puts "
|
182
|
+
def fatal(message = nil, &block)
|
183
|
+
puts "💀 FATAL: #{message || block&.call}"
|
189
184
|
end
|
190
185
|
end
|
191
186
|
|
@@ -198,60 +193,58 @@ class SmartMessage::Logger::RubyLoggerWrapper < SmartMessage::Logger::Base
|
|
198
193
|
@logger = ruby_logger || Logger.new(STDOUT)
|
199
194
|
end
|
200
195
|
|
201
|
-
|
202
|
-
|
196
|
+
# Standard logging methods that delegate to the Ruby logger
|
197
|
+
def debug(message = nil, &block)
|
198
|
+
@logger.debug(message, &block)
|
203
199
|
end
|
204
200
|
|
205
|
-
def
|
206
|
-
@logger.info
|
201
|
+
def info(message = nil, &block)
|
202
|
+
@logger.info(message, &block)
|
207
203
|
end
|
208
204
|
|
209
|
-
def
|
210
|
-
@logger.
|
205
|
+
def warn(message = nil, &block)
|
206
|
+
@logger.warn(message, &block)
|
211
207
|
end
|
212
208
|
|
213
|
-
def
|
214
|
-
@logger.
|
209
|
+
def error(message = nil, &block)
|
210
|
+
@logger.error(message, &block)
|
215
211
|
end
|
216
212
|
|
217
|
-
def
|
218
|
-
@logger.
|
219
|
-
@logger.debug { error.backtrace.join("\n") }
|
213
|
+
def fatal(message = nil, &block)
|
214
|
+
@logger.fatal(message, &block)
|
220
215
|
end
|
221
216
|
end
|
222
217
|
|
223
218
|
# Example: Rails Logger Wrapper (for Rails applications)
|
224
219
|
# Uncomment and use this in your Rails application
|
225
220
|
# class SmartMessage::Logger::RailsLogger < SmartMessage::Logger::Base
|
226
|
-
# def
|
227
|
-
# Rails.logger.tagged('SmartMessage'
|
228
|
-
# Rails.logger.
|
221
|
+
# def debug(message = nil, &block)
|
222
|
+
# Rails.logger.tagged('SmartMessage') do
|
223
|
+
# Rails.logger.debug(message || block&.call)
|
229
224
|
# end
|
230
225
|
# end
|
231
226
|
#
|
232
|
-
# def
|
233
|
-
# Rails.logger.tagged('SmartMessage'
|
234
|
-
# Rails.logger.info
|
227
|
+
# def info(message = nil, &block)
|
228
|
+
# Rails.logger.tagged('SmartMessage') do
|
229
|
+
# Rails.logger.info(message || block&.call)
|
235
230
|
# end
|
236
231
|
# end
|
237
232
|
#
|
238
|
-
# def
|
239
|
-
# Rails.logger.tagged('SmartMessage'
|
240
|
-
# Rails.logger.
|
233
|
+
# def warn(message = nil, &block)
|
234
|
+
# Rails.logger.tagged('SmartMessage') do
|
235
|
+
# Rails.logger.warn(message || block&.call)
|
241
236
|
# end
|
242
237
|
# end
|
243
238
|
#
|
244
|
-
# def
|
245
|
-
# Rails.logger.tagged('SmartMessage'
|
246
|
-
# Rails.logger.
|
239
|
+
# def error(message = nil, &block)
|
240
|
+
# Rails.logger.tagged('SmartMessage') do
|
241
|
+
# Rails.logger.error(message || block&.call)
|
247
242
|
# end
|
248
243
|
# end
|
249
244
|
#
|
250
|
-
# def
|
245
|
+
# def fatal(message = nil, &block)
|
251
246
|
# Rails.logger.tagged('SmartMessage') do
|
252
|
-
# Rails.logger.
|
253
|
-
# Rails.logger.error "#{error.class.name}: #{error.message}"
|
254
|
-
# Rails.logger.debug error.backtrace.join("\n")
|
247
|
+
# Rails.logger.fatal(message || block&.call)
|
255
248
|
# end
|
256
249
|
# end
|
257
250
|
# end
|
@@ -262,24 +255,24 @@ class SmartMessage::Logger::MultiLogger < SmartMessage::Logger::Base
|
|
262
255
|
@loggers = loggers
|
263
256
|
end
|
264
257
|
|
265
|
-
def
|
266
|
-
@loggers.each { |logger| logger.
|
258
|
+
def debug(message = nil, &block)
|
259
|
+
@loggers.each { |logger| logger.debug(message, &block) }
|
267
260
|
end
|
268
261
|
|
269
|
-
def
|
270
|
-
@loggers.each { |logger| logger.
|
262
|
+
def info(message = nil, &block)
|
263
|
+
@loggers.each { |logger| logger.info(message, &block) }
|
271
264
|
end
|
272
265
|
|
273
|
-
def
|
274
|
-
@loggers.each { |logger| logger.
|
266
|
+
def warn(message = nil, &block)
|
267
|
+
@loggers.each { |logger| logger.warn(message, &block) }
|
275
268
|
end
|
276
269
|
|
277
|
-
def
|
278
|
-
@loggers.each { |logger| logger.
|
270
|
+
def error(message = nil, &block)
|
271
|
+
@loggers.each { |logger| logger.error(message, &block) }
|
279
272
|
end
|
280
273
|
|
281
|
-
def
|
282
|
-
@loggers.each { |logger| logger.
|
274
|
+
def fatal(message = nil, &block)
|
275
|
+
@loggers.each { |logger| logger.fatal(message, &block) }
|
283
276
|
end
|
284
277
|
end
|
285
278
|
|
@@ -310,10 +303,11 @@ class OrderProcessingMessage < SmartMessage::Base
|
|
310
303
|
)
|
311
304
|
end
|
312
305
|
|
313
|
-
def self.process(
|
306
|
+
def self.process(wrapper)
|
307
|
+
message_header, message_payload = wrapper.split
|
314
308
|
# Simulate the logger being called during processing
|
315
309
|
if logger
|
316
|
-
logger.
|
310
|
+
logger.info { "[SmartMessage] Received: #{self.name} (#{message_payload.bytesize} bytes)" }
|
317
311
|
end
|
318
312
|
|
319
313
|
# Process the message
|
@@ -324,7 +318,7 @@ class OrderProcessingMessage < SmartMessage::Base
|
|
324
318
|
|
325
319
|
# Log processing completion
|
326
320
|
if logger
|
327
|
-
logger.
|
321
|
+
logger.info { "[SmartMessage] Processed: #{self.name} - #{result}" }
|
328
322
|
end
|
329
323
|
|
330
324
|
result
|
@@ -333,15 +327,15 @@ class OrderProcessingMessage < SmartMessage::Base
|
|
333
327
|
# Override publish to demonstrate logging hooks
|
334
328
|
def publish
|
335
329
|
# Log message creation
|
336
|
-
logger_instance = logger ||
|
330
|
+
logger_instance = self.class.logger || SmartMessage::Logger.default
|
337
331
|
if logger_instance
|
338
|
-
logger_instance.
|
332
|
+
logger_instance.debug { "[SmartMessage] Created: #{self.class.name}" }
|
339
333
|
end
|
340
334
|
|
341
335
|
# Log publishing
|
342
336
|
transport_instance = transport || self.class.transport
|
343
337
|
if logger_instance
|
344
|
-
logger_instance.
|
338
|
+
logger_instance.info { "[SmartMessage] Published: #{self.class.name} via #{transport_instance.class.name.split('::').last}" }
|
345
339
|
end
|
346
340
|
|
347
341
|
# Call original publish method
|
@@ -349,7 +343,7 @@ class OrderProcessingMessage < SmartMessage::Base
|
|
349
343
|
rescue => error
|
350
344
|
# Log any errors during publishing
|
351
345
|
if logger_instance
|
352
|
-
logger_instance.
|
346
|
+
logger_instance.error { "[SmartMessage] Error: Failed to publish #{self.class.name} - #{error.class.name}: #{error.message}" }
|
353
347
|
end
|
354
348
|
raise
|
355
349
|
end
|
@@ -376,9 +370,10 @@ class NotificationMessage < SmartMessage::Base
|
|
376
370
|
logger SmartMessage::Logger::FileLogger.new('logs/notifications.log', level: Logger::WARN)
|
377
371
|
end
|
378
372
|
|
379
|
-
def self.process(
|
373
|
+
def self.process(wrapper)
|
374
|
+
message_header, message_payload = wrapper.split
|
380
375
|
if logger
|
381
|
-
logger.
|
376
|
+
logger.info { "[SmartMessage] Received: #{self.name} (#{message_payload.bytesize} bytes)" }
|
382
377
|
end
|
383
378
|
|
384
379
|
notification_data = JSON.parse(message_payload)
|
@@ -387,7 +382,7 @@ class NotificationMessage < SmartMessage::Base
|
|
387
382
|
puts "📬 Notification: #{result}"
|
388
383
|
|
389
384
|
if logger
|
390
|
-
logger.
|
385
|
+
logger.info { "[SmartMessage] Processed: #{self.name} - #{result}" }
|
391
386
|
end
|
392
387
|
|
393
388
|
result
|
@@ -425,7 +420,8 @@ class StandardLoggerMessage < SmartMessage::Base
|
|
425
420
|
# logger SmartMessage::Logger::RubyLoggerWrapper.new(Rails.logger)
|
426
421
|
end
|
427
422
|
|
428
|
-
def self.process(
|
423
|
+
def self.process(wrapper)
|
424
|
+
message_header, message_payload = wrapper.split
|
429
425
|
data = JSON.parse(message_payload)
|
430
426
|
puts "📝 Processing: #{data['content']}"
|
431
427
|
"Processed"
|
@@ -449,7 +445,8 @@ class DefaultLoggerMessage < SmartMessage::Base
|
|
449
445
|
logger SmartMessage::Logger::Default.new
|
450
446
|
end
|
451
447
|
|
452
|
-
def self.process(
|
448
|
+
def self.process(wrapper)
|
449
|
+
message_header, message_payload = wrapper.split
|
453
450
|
data = JSON.parse(message_payload)
|
454
451
|
puts "🎯 DefaultLogger: Processing #{data['message']}"
|
455
452
|
"Processed with default logger"
|
@@ -584,10 +581,8 @@ class LoggerDemo
|
|
584
581
|
|
585
582
|
# Simulate an error during processing
|
586
583
|
if OrderProcessingMessage.logger
|
587
|
-
|
588
|
-
|
589
|
-
StandardError.new("Invalid order data provided")
|
590
|
-
)
|
584
|
+
error = StandardError.new("Invalid order data provided")
|
585
|
+
OrderProcessingMessage.logger.error { "[SmartMessage] Error: Simulated error for demo - #{error.class.name}: #{error.message}" }
|
591
586
|
end
|
592
587
|
|
593
588
|
rescue => error
|
@@ -53,7 +53,8 @@ class UserRegistrationMessage < SmartMessage::Base
|
|
53
53
|
serializer SmartMessage::Serializer::JSON.new
|
54
54
|
end
|
55
55
|
|
56
|
-
def self.process(
|
56
|
+
def self.process(wrapper)
|
57
|
+
message_header, message_payload = wrapper.split
|
57
58
|
user_data = JSON.parse(message_payload)
|
58
59
|
puts "✅ User registration processed: #{user_data['username']} (#{user_data['email']})"
|
59
60
|
end
|
@@ -101,7 +102,8 @@ class UserRegistrationMessageV2 < SmartMessage::Base
|
|
101
102
|
serializer SmartMessage::Serializer::JSON.new
|
102
103
|
end
|
103
104
|
|
104
|
-
def self.process(
|
105
|
+
def self.process(wrapper)
|
106
|
+
message_header, message_payload = wrapper.split
|
105
107
|
user_data = JSON.parse(message_payload)
|
106
108
|
puts "✅ User registration V2 processed: #{user_data['username']} (#{user_data['email']}, #{user_data['phone_number']})"
|
107
109
|
end
|
@@ -43,7 +43,9 @@ class OrderMessage < SmartMessage::Base
|
|
43
43
|
serializer SmartMessage::Serializer::JSON.new
|
44
44
|
end
|
45
45
|
|
46
|
-
def self.process(
|
46
|
+
def self.process(wrapper)
|
47
|
+
header = wrapper._sm_header
|
48
|
+
payload = wrapper._sm_payload
|
47
49
|
data = JSON.parse(payload)
|
48
50
|
puts " 🎯 FULFILLMENT SERVICE received order:"
|
49
51
|
puts " Order ID: #{data['order_id']}"
|
@@ -94,7 +96,9 @@ class SystemAnnouncementMessage < SmartMessage::Base
|
|
94
96
|
serializer SmartMessage::Serializer::JSON.new
|
95
97
|
end
|
96
98
|
|
97
|
-
def self.process(
|
99
|
+
def self.process(wrapper)
|
100
|
+
header = wrapper._sm_header
|
101
|
+
payload = wrapper._sm_payload
|
98
102
|
data = JSON.parse(payload)
|
99
103
|
priority_icon = data['priority'] == 'high' ? '🚨' : '📢'
|
100
104
|
puts " #{priority_icon} ALL SERVICES received announcement:"
|
@@ -144,7 +148,9 @@ class UserLookupRequest < SmartMessage::Base
|
|
144
148
|
serializer SmartMessage::Serializer::JSON.new
|
145
149
|
end
|
146
150
|
|
147
|
-
def self.process(
|
151
|
+
def self.process(wrapper)
|
152
|
+
header = wrapper._sm_header
|
153
|
+
payload = wrapper._sm_payload
|
148
154
|
data = JSON.parse(payload)
|
149
155
|
puts " 🔍 USER SERVICE received lookup request:"
|
150
156
|
puts " Request ID: #{data['request_id']}"
|
@@ -176,7 +182,9 @@ class UserLookupResponse < SmartMessage::Base
|
|
176
182
|
serializer SmartMessage::Serializer::JSON.new
|
177
183
|
end
|
178
184
|
|
179
|
-
def self.process(
|
185
|
+
def self.process(wrapper)
|
186
|
+
header = wrapper._sm_header
|
187
|
+
payload = wrapper._sm_payload
|
180
188
|
data = JSON.parse(payload)
|
181
189
|
puts " ✅ WEB SERVICE received lookup response:"
|
182
190
|
puts " Request ID: #{data['request_id']}"
|
@@ -246,7 +254,9 @@ class PaymentMessage < SmartMessage::Base
|
|
246
254
|
serializer SmartMessage::Serializer::JSON.new
|
247
255
|
end
|
248
256
|
|
249
|
-
def self.process(
|
257
|
+
def self.process(wrapper)
|
258
|
+
header = wrapper._sm_header
|
259
|
+
payload = wrapper._sm_payload
|
250
260
|
data = JSON.parse(payload)
|
251
261
|
gateway_icon = header.to.include?('backup') ? '🔄' : '🏦'
|
252
262
|
puts " #{gateway_icon} #{header.to.upcase} received payment:"
|
@@ -319,7 +329,9 @@ class ExternalAPIMessage < SmartMessage::Base
|
|
319
329
|
serializer SmartMessage::Serializer::JSON.new
|
320
330
|
end
|
321
331
|
|
322
|
-
def self.process(
|
332
|
+
def self.process(wrapper)
|
333
|
+
header = wrapper._sm_header
|
334
|
+
payload = wrapper._sm_payload
|
323
335
|
data = JSON.parse(payload)
|
324
336
|
puts " 🌐 EXTERNAL PARTNER received API call:"
|
325
337
|
puts " API Call: #{data['api_call']}"
|
@@ -41,7 +41,9 @@ class ServiceMessage < SmartMessage::Base
|
|
41
41
|
end
|
42
42
|
|
43
43
|
# Different handlers for different subscription filters
|
44
|
-
def self.process_broadcast(
|
44
|
+
def self.process_broadcast(wrapper)
|
45
|
+
header = wrapper._sm_header
|
46
|
+
payload = wrapper._sm_payload
|
45
47
|
data = JSON.parse(payload)
|
46
48
|
puts " 📻 BROADCAST HANDLER received:"
|
47
49
|
puts " Type: #{data['message_type']}"
|
@@ -49,7 +51,9 @@ class ServiceMessage < SmartMessage::Base
|
|
49
51
|
puts " Data: #{data['data']}"
|
50
52
|
end
|
51
53
|
|
52
|
-
def self.process_directed(
|
54
|
+
def self.process_directed(wrapper)
|
55
|
+
header = wrapper._sm_header
|
56
|
+
payload = wrapper._sm_payload
|
53
57
|
data = JSON.parse(payload)
|
54
58
|
puts " 🎯 DIRECTED HANDLER received:"
|
55
59
|
puts " Type: #{data['message_type']}"
|
@@ -57,7 +61,9 @@ class ServiceMessage < SmartMessage::Base
|
|
57
61
|
puts " Data: #{data['data']}"
|
58
62
|
end
|
59
63
|
|
60
|
-
def self.process_from_admin(
|
64
|
+
def self.process_from_admin(wrapper)
|
65
|
+
header = wrapper._sm_header
|
66
|
+
payload = wrapper._sm_payload
|
61
67
|
data = JSON.parse(payload)
|
62
68
|
puts " 👮 ADMIN HANDLER received:"
|
63
69
|
puts " Type: #{data['message_type']}"
|
@@ -151,7 +157,9 @@ class AlertMessage < SmartMessage::Base
|
|
151
157
|
serializer SmartMessage::Serializer::JSON.new
|
152
158
|
end
|
153
159
|
|
154
|
-
def self.process_critical_or_broadcast(
|
160
|
+
def self.process_critical_or_broadcast(wrapper)
|
161
|
+
header = wrapper._sm_header
|
162
|
+
payload = wrapper._sm_payload
|
155
163
|
data = JSON.parse(payload)
|
156
164
|
icon = data['severity'] == 'critical' ? '🚨' : '📢'
|
157
165
|
puts " #{icon} ALERT MONITOR received:"
|
@@ -160,7 +168,9 @@ class AlertMessage < SmartMessage::Base
|
|
160
168
|
puts " Alert: #{data['alert_text']}"
|
161
169
|
end
|
162
170
|
|
163
|
-
def self.process_from_monitoring(
|
171
|
+
def self.process_from_monitoring(wrapper)
|
172
|
+
header = wrapper._sm_header
|
173
|
+
payload = wrapper._sm_payload
|
164
174
|
data = JSON.parse(payload)
|
165
175
|
puts " 📊 MONITORING TEAM received:"
|
166
176
|
puts " From: #{header.from} (monitoring system)"
|
@@ -255,7 +265,9 @@ class OrderMessage < SmartMessage::Base
|
|
255
265
|
serializer SmartMessage::Serializer::JSON.new
|
256
266
|
end
|
257
267
|
|
258
|
-
def self.process_high_priority(
|
268
|
+
def self.process_high_priority(wrapper)
|
269
|
+
header = wrapper._sm_header
|
270
|
+
payload = wrapper._sm_payload
|
259
271
|
data = JSON.parse(payload)
|
260
272
|
puts " 🚀 HIGH PRIORITY ORDER HANDLER:"
|
261
273
|
puts " Order ID: #{data['order_id']} (PRIORITY: #{data['priority'].upcase})"
|
@@ -263,7 +275,9 @@ class OrderMessage < SmartMessage::Base
|
|
263
275
|
puts " Total: $#{data['total_amount']}"
|
264
276
|
end
|
265
277
|
|
266
|
-
def self.process_normal(
|
278
|
+
def self.process_normal(wrapper)
|
279
|
+
header = wrapper._sm_header
|
280
|
+
payload = wrapper._sm_payload
|
267
281
|
data = JSON.parse(payload)
|
268
282
|
puts " 📦 NORMAL ORDER HANDLER:"
|
269
283
|
puts " Order ID: #{data['order_id']}"
|
@@ -346,7 +360,9 @@ class ServiceRequest < SmartMessage::Base
|
|
346
360
|
serializer SmartMessage::Serializer::JSON.new
|
347
361
|
end
|
348
362
|
|
349
|
-
def self.process_api_requests(
|
363
|
+
def self.process_api_requests(wrapper)
|
364
|
+
header = wrapper._sm_header
|
365
|
+
payload = wrapper._sm_payload
|
350
366
|
data = JSON.parse(payload)
|
351
367
|
puts " 🌐 API SERVICE received request:"
|
352
368
|
puts " Request ID: #{data['request_id']}"
|
@@ -355,7 +371,9 @@ class ServiceRequest < SmartMessage::Base
|
|
355
371
|
puts " Reply To: #{header.reply_to}"
|
356
372
|
end
|
357
373
|
|
358
|
-
def self.process_data_requests(
|
374
|
+
def self.process_data_requests(wrapper)
|
375
|
+
header = wrapper._sm_header
|
376
|
+
payload = wrapper._sm_payload
|
359
377
|
data = JSON.parse(payload)
|
360
378
|
puts " 💾 DATA SERVICE received request:"
|
361
379
|
puts " Request ID: #{data['request_id']}"
|