smart_message 0.0.13 → 0.0.16
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/CHANGELOG.md +120 -0
- data/Gemfile.lock +3 -3
- data/README.md +71 -25
- data/docs/index.md +2 -0
- data/docs/reference/transports.md +46 -21
- data/docs/transports/memory-transport.md +2 -1
- data/docs/transports/multi-transport.md +484 -0
- data/examples/file/00_run_all_file_demos.rb +260 -0
- data/examples/file/01_basic_file_transport_demo.rb +237 -0
- data/examples/file/02_fifo_transport_demo.rb +289 -0
- data/examples/file/03_file_watching_demo.rb +332 -0
- data/examples/file/04_multi_transport_file_demo.rb +432 -0
- data/examples/file/README.md +257 -0
- data/examples/memory/00_run_all_demos.rb +317 -0
- data/examples/memory/01_message_deduplication_demo.rb +18 -30
- data/examples/memory/02_dead_letter_queue_demo.rb +9 -9
- data/examples/memory/03_point_to_point_orders.rb +3 -3
- data/examples/memory/04_publish_subscribe_events.rb +15 -15
- data/examples/memory/05_many_to_many_chat.rb +19 -19
- data/examples/memory/06_stdout_publish_only.rb +145 -0
- data/examples/memory/07_proc_handlers_demo.rb +13 -13
- data/examples/memory/08_custom_logger_demo.rb +136 -136
- data/examples/memory/09_error_handling_demo.rb +7 -7
- data/examples/memory/10_entity_addressing_basic.rb +25 -25
- data/examples/memory/11_entity_addressing_with_filtering.rb +32 -32
- data/examples/memory/12_regex_filtering_microservices.rb +10 -10
- data/examples/memory/14_global_configuration_demo.rb +12 -12
- data/examples/memory/README.md +34 -17
- data/examples/memory/log/demo_app.log.1 +100 -0
- data/examples/memory/log/demo_app.log.2 +100 -0
- data/examples/multi_transport_example.rb +114 -0
- data/examples/redis/01_smart_home_iot_demo.rb +20 -20
- data/examples/utilities/box_it.rb +12 -0
- data/examples/utilities/doing.rb +19 -0
- data/examples/utilities/temp.md +28 -0
- data/lib/smart_message/base.rb +5 -7
- data/lib/smart_message/errors.rb +3 -0
- data/lib/smart_message/header.rb +1 -1
- data/lib/smart_message/logger/default.rb +1 -1
- data/lib/smart_message/messaging.rb +36 -6
- data/lib/smart_message/plugins.rb +46 -4
- data/lib/smart_message/serializer/base.rb +1 -1
- data/lib/smart_message/serializer.rb +3 -2
- data/lib/smart_message/subscription.rb +18 -20
- data/lib/smart_message/transport/async_publish_queue.rb +284 -0
- data/lib/smart_message/transport/fifo_operations.rb +264 -0
- data/lib/smart_message/transport/file_operations.rb +200 -0
- data/lib/smart_message/transport/file_transport.rb +149 -0
- data/lib/smart_message/transport/file_watching.rb +72 -0
- data/lib/smart_message/transport/partitioned_files.rb +46 -0
- data/lib/smart_message/transport/stdout_transport.rb +50 -36
- data/lib/smart_message/transport/stdout_transport.rb.backup +88 -0
- data/lib/smart_message/version.rb +1 -1
- metadata +24 -10
- data/ideas/README.md +0 -41
- data/ideas/agents.md +0 -1001
- data/ideas/database_transport.md +0 -980
- data/ideas/improvement.md +0 -359
- data/ideas/meshage.md +0 -1788
- data/ideas/message_discovery.md +0 -178
- data/ideas/message_schema.md +0 -1381
- data/lib/smart_message/wrapper.rb.bak +0 -132
- /data/examples/memory/{06_pretty_print_demo.rb → 16_pretty_print_demo.rb} +0 -0
@@ -49,11 +49,11 @@ class UserRegistrationMessage < SmartMessage::Base
|
|
49
49
|
description: "Timestamp when user account was created"
|
50
50
|
|
51
51
|
config do
|
52
|
-
transport SmartMessage::Transport::
|
52
|
+
transport SmartMessage::Transport::MemoryTransport.new
|
53
53
|
end
|
54
54
|
|
55
|
-
def
|
56
|
-
message_header, message_payload =
|
55
|
+
def process(message)
|
56
|
+
message_header, message_payload = message
|
57
57
|
user_data = JSON.parse(message_payload)
|
58
58
|
puts "✅ User registration processed: #{user_data['username']} (#{user_data['email']})"
|
59
59
|
end
|
@@ -97,11 +97,11 @@ class UserRegistrationMessageV2 < SmartMessage::Base
|
|
97
97
|
description: "Timestamp when user account was created"
|
98
98
|
|
99
99
|
config do
|
100
|
-
transport SmartMessage::Transport::
|
100
|
+
transport SmartMessage::Transport::MemoryTransport.new
|
101
101
|
end
|
102
102
|
|
103
|
-
def
|
104
|
-
message_header, message_payload =
|
103
|
+
def process(message)
|
104
|
+
message_header, message_payload = message
|
105
105
|
user_data = JSON.parse(message_payload)
|
106
106
|
puts "✅ User registration V2 processed: #{user_data['username']} (#{user_data['email']}, #{user_data['phone_number']})"
|
107
107
|
end
|
@@ -118,7 +118,7 @@ class MultiRequiredMessage < SmartMessage::Base
|
|
118
118
|
property :optional_field, description: "Optional field for comparison"
|
119
119
|
|
120
120
|
config do
|
121
|
-
transport SmartMessage::Transport::
|
121
|
+
transport SmartMessage::Transport::MemoryTransport.new
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
@@ -14,7 +14,7 @@ puts "🎯 SmartMessage Entity Addressing Demo"
|
|
14
14
|
puts "=" * 50
|
15
15
|
|
16
16
|
# Configure transport for demo
|
17
|
-
transport = SmartMessage::Transport.
|
17
|
+
transport = SmartMessage::Transport::MemoryTransport.new
|
18
18
|
serializer = SmartMessage::Serializer::Json.new
|
19
19
|
|
20
20
|
# =============================================================================
|
@@ -39,12 +39,12 @@ class OrderMessage < SmartMessage::Base
|
|
39
39
|
property :total_amount, required: true
|
40
40
|
|
41
41
|
config do
|
42
|
-
transport SmartMessage::Transport.
|
42
|
+
transport SmartMessage::Transport::MemoryTransport.new
|
43
43
|
end
|
44
44
|
|
45
|
-
def
|
46
|
-
header =
|
47
|
-
payload =
|
45
|
+
def process(message)
|
46
|
+
header = message._sm_header
|
47
|
+
payload = message
|
48
48
|
data = JSON.parse(payload)
|
49
49
|
puts " 🎯 FULFILLMENT SERVICE received order:"
|
50
50
|
puts " Order ID: #{data['order_id']}"
|
@@ -91,12 +91,12 @@ class SystemAnnouncementMessage < SmartMessage::Base
|
|
91
91
|
property :effective_time, required: true
|
92
92
|
|
93
93
|
config do
|
94
|
-
transport SmartMessage::Transport.
|
94
|
+
transport SmartMessage::Transport::MemoryTransport.new
|
95
95
|
end
|
96
96
|
|
97
|
-
def
|
98
|
-
header =
|
99
|
-
payload =
|
97
|
+
def process(message)
|
98
|
+
header = message._sm_header
|
99
|
+
payload = message
|
100
100
|
data = JSON.parse(payload)
|
101
101
|
priority_icon = data['priority'] == 'high' ? '🚨' : '📢'
|
102
102
|
puts " #{priority_icon} ALL SERVICES received announcement:"
|
@@ -142,12 +142,12 @@ class UserLookupRequest < SmartMessage::Base
|
|
142
142
|
property :requested_fields, default: ['name', 'email']
|
143
143
|
|
144
144
|
config do
|
145
|
-
transport SmartMessage::Transport.
|
145
|
+
transport SmartMessage::Transport::MemoryTransport.new
|
146
146
|
end
|
147
147
|
|
148
|
-
def
|
149
|
-
header =
|
150
|
-
payload =
|
148
|
+
def process(message)
|
149
|
+
header = message._sm_header
|
150
|
+
payload = message
|
151
151
|
data = JSON.parse(payload)
|
152
152
|
puts " 🔍 USER SERVICE received lookup request:"
|
153
153
|
puts " Request ID: #{data['request_id']}"
|
@@ -175,12 +175,12 @@ class UserLookupResponse < SmartMessage::Base
|
|
175
175
|
property :error_message
|
176
176
|
|
177
177
|
config do
|
178
|
-
transport SmartMessage::Transport.
|
178
|
+
transport SmartMessage::Transport::MemoryTransport.new
|
179
179
|
end
|
180
180
|
|
181
|
-
def
|
182
|
-
header =
|
183
|
-
payload =
|
181
|
+
def process(message)
|
182
|
+
header = message._sm_header
|
183
|
+
payload = message
|
184
184
|
data = JSON.parse(payload)
|
185
185
|
puts " ✅ WEB SERVICE received lookup response:"
|
186
186
|
puts " Request ID: #{data['request_id']}"
|
@@ -246,12 +246,12 @@ class PaymentMessage < SmartMessage::Base
|
|
246
246
|
property :payment_method, default: 'credit_card'
|
247
247
|
|
248
248
|
config do
|
249
|
-
transport SmartMessage::Transport.
|
249
|
+
transport SmartMessage::Transport::MemoryTransport.new
|
250
250
|
end
|
251
251
|
|
252
|
-
def
|
253
|
-
header =
|
254
|
-
payload =
|
252
|
+
def process(message)
|
253
|
+
header = message._sm_header
|
254
|
+
payload = message
|
255
255
|
data = JSON.parse(payload)
|
256
256
|
gateway_icon = header.to.include?('backup') ? '🔄' : '🏦'
|
257
257
|
puts " #{gateway_icon} #{header.to.upcase} received payment:"
|
@@ -320,12 +320,12 @@ class ExternalAPIMessage < SmartMessage::Base
|
|
320
320
|
property :partner_id, required: true
|
321
321
|
|
322
322
|
config do
|
323
|
-
transport SmartMessage::Transport.
|
323
|
+
transport SmartMessage::Transport::MemoryTransport.new
|
324
324
|
end
|
325
325
|
|
326
|
-
def
|
327
|
-
header =
|
328
|
-
payload =
|
326
|
+
def process(message)
|
327
|
+
header = message._sm_header
|
328
|
+
payload = message
|
329
329
|
data = JSON.parse(payload)
|
330
330
|
puts " 🌐 EXTERNAL PARTNER received API call:"
|
331
331
|
puts " API Call: #{data['api_call']}"
|
@@ -15,7 +15,7 @@ puts "🎯 SmartMessage Entity Addressing & Filtering Demo"
|
|
15
15
|
puts "=" * 50
|
16
16
|
|
17
17
|
# Configure transport for demo
|
18
|
-
transport = SmartMessage::Transport.
|
18
|
+
transport = SmartMessage::Transport::MemoryTransport.new
|
19
19
|
serializer = SmartMessage::Serializer::Json.new
|
20
20
|
|
21
21
|
# =============================================================================
|
@@ -36,13 +36,13 @@ class ServiceMessage < SmartMessage::Base
|
|
36
36
|
property :timestamp, default: -> { Time.now.to_s }
|
37
37
|
|
38
38
|
config do
|
39
|
-
transport SmartMessage::Transport.
|
39
|
+
transport SmartMessage::Transport::MemoryTransport.new
|
40
40
|
end
|
41
41
|
|
42
42
|
# Different handlers for different subscription filters
|
43
|
-
def
|
44
|
-
header =
|
45
|
-
payload =
|
43
|
+
def process_broadcast(message)
|
44
|
+
header = message._sm_header
|
45
|
+
payload = message
|
46
46
|
data = JSON.parse(payload)
|
47
47
|
puts " 📻 BROADCAST HANDLER received:"
|
48
48
|
puts " Type: #{data['message_type']}"
|
@@ -50,9 +50,9 @@ class ServiceMessage < SmartMessage::Base
|
|
50
50
|
puts " Data: #{data['data']}"
|
51
51
|
end
|
52
52
|
|
53
|
-
def
|
54
|
-
header =
|
55
|
-
payload =
|
53
|
+
def process_directed(message)
|
54
|
+
header = message._sm_header
|
55
|
+
payload = message
|
56
56
|
data = JSON.parse(payload)
|
57
57
|
puts " 🎯 DIRECTED HANDLER received:"
|
58
58
|
puts " Type: #{data['message_type']}"
|
@@ -60,9 +60,9 @@ class ServiceMessage < SmartMessage::Base
|
|
60
60
|
puts " Data: #{data['data']}"
|
61
61
|
end
|
62
62
|
|
63
|
-
def
|
64
|
-
header =
|
65
|
-
payload =
|
63
|
+
def process_from_admin(message)
|
64
|
+
header = message._sm_header
|
65
|
+
payload = message
|
66
66
|
data = JSON.parse(payload)
|
67
67
|
puts " 👮 ADMIN HANDLER received:"
|
68
68
|
puts " Type: #{data['message_type']}"
|
@@ -152,12 +152,12 @@ class AlertMessage < SmartMessage::Base
|
|
152
152
|
property :source_system
|
153
153
|
|
154
154
|
config do
|
155
|
-
transport SmartMessage::Transport.
|
155
|
+
transport SmartMessage::Transport::MemoryTransport.new
|
156
156
|
end
|
157
157
|
|
158
|
-
def
|
159
|
-
header =
|
160
|
-
payload =
|
158
|
+
def process_broadcast(message)
|
159
|
+
header = message._sm_header
|
160
|
+
payload = message
|
161
161
|
data = JSON.parse(payload)
|
162
162
|
icon = data['severity'] == 'critical' ? '🚨' : '📢'
|
163
163
|
puts " #{icon} ALERT MONITOR received:"
|
@@ -166,9 +166,9 @@ class AlertMessage < SmartMessage::Base
|
|
166
166
|
puts " Alert: #{data['alert_text']}"
|
167
167
|
end
|
168
168
|
|
169
|
-
def
|
170
|
-
header =
|
171
|
-
payload =
|
169
|
+
def process_from_monitoring(message)
|
170
|
+
header = message._sm_header
|
171
|
+
payload = message
|
172
172
|
data = JSON.parse(payload)
|
173
173
|
puts " 📊 MONITORING TEAM received:"
|
174
174
|
puts " From: #{header.from} (monitoring system)"
|
@@ -259,12 +259,12 @@ class OrderMessage < SmartMessage::Base
|
|
259
259
|
property :total_amount, required: true
|
260
260
|
|
261
261
|
config do
|
262
|
-
transport SmartMessage::Transport.
|
262
|
+
transport SmartMessage::Transport::MemoryTransport.new
|
263
263
|
end
|
264
264
|
|
265
|
-
def
|
266
|
-
header =
|
267
|
-
payload =
|
265
|
+
def process_high_priority(message)
|
266
|
+
header = message._sm_header
|
267
|
+
payload = message
|
268
268
|
data = JSON.parse(payload)
|
269
269
|
puts " 🚀 HIGH PRIORITY ORDER HANDLER:"
|
270
270
|
puts " Order ID: #{data['order_id']} (PRIORITY: #{data['priority'].upcase})"
|
@@ -272,9 +272,9 @@ class OrderMessage < SmartMessage::Base
|
|
272
272
|
puts " Total: $#{data['total_amount']}"
|
273
273
|
end
|
274
274
|
|
275
|
-
def
|
276
|
-
header =
|
277
|
-
payload =
|
275
|
+
def process_normal(message)
|
276
|
+
header = message._sm_header
|
277
|
+
payload = message
|
278
278
|
data = JSON.parse(payload)
|
279
279
|
puts " 📦 NORMAL ORDER HANDLER:"
|
280
280
|
puts " Order ID: #{data['order_id']}"
|
@@ -353,12 +353,12 @@ class ServiceRequest < SmartMessage::Base
|
|
353
353
|
property :data
|
354
354
|
|
355
355
|
config do
|
356
|
-
transport SmartMessage::Transport.
|
356
|
+
transport SmartMessage::Transport::MemoryTransport.new
|
357
357
|
end
|
358
358
|
|
359
|
-
def
|
360
|
-
header =
|
361
|
-
payload =
|
359
|
+
def process_api_requests(message)
|
360
|
+
header = message._sm_header
|
361
|
+
payload = message
|
362
362
|
data = JSON.parse(payload)
|
363
363
|
puts " 🌐 API SERVICE received request:"
|
364
364
|
puts " Request ID: #{data['request_id']}"
|
@@ -367,9 +367,9 @@ class ServiceRequest < SmartMessage::Base
|
|
367
367
|
puts " Reply To: #{header.reply_to}"
|
368
368
|
end
|
369
369
|
|
370
|
-
def
|
371
|
-
header =
|
372
|
-
payload =
|
370
|
+
def process_data_requests(message)
|
371
|
+
header = message._sm_header
|
372
|
+
payload = message
|
373
373
|
data = JSON.parse(payload)
|
374
374
|
puts " 💾 DATA SERVICE received request:"
|
375
375
|
puts " Request ID: #{data['request_id']}"
|
@@ -30,7 +30,7 @@ class MicroserviceMessage < SmartMessage::Base
|
|
30
30
|
|
31
31
|
# Configure with STDOUT transport for demo visibility
|
32
32
|
config do
|
33
|
-
transport SmartMessage::Transport::
|
33
|
+
transport SmartMessage::Transport::MemoryTransport.new
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -42,9 +42,9 @@ class PaymentMessage < MicroserviceMessage
|
|
42
42
|
property :amount, required: true
|
43
43
|
property :currency, default: 'USD'
|
44
44
|
|
45
|
-
def
|
46
|
-
header =
|
47
|
-
payload =
|
45
|
+
def process(message)
|
46
|
+
header = message._sm_header
|
47
|
+
payload = message
|
48
48
|
msg_data = JSON.parse(payload)
|
49
49
|
puts "💳 PaymentMessage processed by #{self.name}"
|
50
50
|
puts " From: #{header.from} → To: #{header.to}"
|
@@ -61,9 +61,9 @@ class OrderMessage < MicroserviceMessage
|
|
61
61
|
property :customer_id, required: true
|
62
62
|
property :status, default: 'pending'
|
63
63
|
|
64
|
-
def
|
65
|
-
header =
|
66
|
-
payload =
|
64
|
+
def process(message)
|
65
|
+
header = message._sm_header
|
66
|
+
payload = message
|
67
67
|
msg_data = JSON.parse(payload)
|
68
68
|
puts "📦 OrderMessage processed by #{self.name}"
|
69
69
|
puts " From: #{header.from} → To: #{header.to}"
|
@@ -80,9 +80,9 @@ class AlertMessage < MicroserviceMessage
|
|
80
80
|
property :component, required: true
|
81
81
|
property :description, required: true
|
82
82
|
|
83
|
-
def
|
84
|
-
header =
|
85
|
-
payload =
|
83
|
+
def process(message)
|
84
|
+
header = message._sm_header
|
85
|
+
payload = message
|
86
86
|
msg_data = JSON.parse(payload)
|
87
87
|
puts "🚨 AlertMessage processed by #{self.name}"
|
88
88
|
puts " From: #{header.from} → To: #{header.to}"
|
@@ -24,14 +24,14 @@ puts
|
|
24
24
|
puts "2. Configuring Logging with String Path:"
|
25
25
|
SmartMessage.configure do |config|
|
26
26
|
config.logger = "log/my_application.log" # String = Lumberjack logger with this path
|
27
|
-
config.transport = SmartMessage::Transport::
|
28
|
-
|
27
|
+
config.transport = SmartMessage::Transport::MemoryTransport.new
|
28
|
+
# Note: Serializers are configured per transport, not globally
|
29
29
|
end
|
30
30
|
|
31
31
|
puts " Configured Logger: #{SmartMessage::Logger.default.class}"
|
32
32
|
puts " Log File: #{SmartMessage::Logger.default.log_file rescue 'N/A'}"
|
33
33
|
puts " Configured Transport: #{SmartMessage::Transport.default.class}"
|
34
|
-
puts "
|
34
|
+
puts " Framework Default Serializer: #{SmartMessage::Serializer.default.class}"
|
35
35
|
puts
|
36
36
|
|
37
37
|
# Reset for next example
|
@@ -41,14 +41,14 @@ SmartMessage.reset_configuration!
|
|
41
41
|
puts "3. Configuring with :default Symbol:"
|
42
42
|
SmartMessage.configure do |config|
|
43
43
|
config.logger = :default # Use Lumberjack with default settings
|
44
|
-
config.transport = SmartMessage::Transport::
|
45
|
-
|
44
|
+
config.transport = SmartMessage::Transport::MemoryTransport.new
|
45
|
+
# Note: Serializers are configured per transport, not globally
|
46
46
|
end
|
47
47
|
|
48
48
|
puts " Configured Logger: #{SmartMessage::Logger.default.class}"
|
49
49
|
puts " Log File: #{SmartMessage::Logger.default.log_file rescue 'N/A'}"
|
50
50
|
puts " Configured Transport: #{SmartMessage::Transport.default.class}"
|
51
|
-
puts "
|
51
|
+
puts " Framework Default Serializer: #{SmartMessage::Serializer.default.class}"
|
52
52
|
puts
|
53
53
|
|
54
54
|
# Example 4: Message classes automatically use global configuration
|
@@ -65,8 +65,8 @@ class NotificationMessage < SmartMessage::Base
|
|
65
65
|
logger SmartMessage::Logger.default
|
66
66
|
end
|
67
67
|
|
68
|
-
def
|
69
|
-
message_header, message_payload =
|
68
|
+
def process(message)
|
69
|
+
message_header, message_payload = message
|
70
70
|
data = JSON.parse(message_payload)
|
71
71
|
|
72
72
|
priority_emoji = case data['priority']
|
@@ -90,8 +90,8 @@ class OrderStatusMessage < SmartMessage::Base
|
|
90
90
|
logger SmartMessage::Logger.default
|
91
91
|
end
|
92
92
|
|
93
|
-
def
|
94
|
-
message_header, message_payload =
|
93
|
+
def process(message)
|
94
|
+
message_header, message_payload = message
|
95
95
|
data = JSON.parse(message_payload)
|
96
96
|
|
97
97
|
status_emoji = case data['status']
|
@@ -152,8 +152,8 @@ class SpecialMessage < SmartMessage::Base
|
|
152
152
|
# transport and serializer still use global configuration
|
153
153
|
end
|
154
154
|
|
155
|
-
def
|
156
|
-
message_header, message_payload =
|
155
|
+
def process(message)
|
156
|
+
message_header, message_payload = message
|
157
157
|
data = JSON.parse(message_payload)
|
158
158
|
puts "⭐ Special processing: #{data['content']}"
|
159
159
|
end
|
data/examples/memory/README.md
CHANGED
@@ -1,16 +1,25 @@
|
|
1
1
|
# Memory Transport Examples
|
2
2
|
|
3
|
-
This directory contains demonstration programs that use SmartMessage's **Memory Transport** and **
|
3
|
+
This directory contains demonstration programs that use SmartMessage's **Memory Transport** and **STDOUT Transport**. These examples show the fundamentals of SmartMessage without requiring external dependencies like Redis or message queues.
|
4
4
|
|
5
5
|
## Transport Overview
|
6
6
|
|
7
|
-
|
7
|
+
### Memory Transport
|
8
|
+
Perfect for local development with message processing:
|
8
9
|
- **Learning SmartMessage fundamentals**
|
9
|
-
- **Rapid prototyping and testing**
|
10
|
+
- **Rapid prototyping and testing**
|
10
11
|
- **Single-process applications**
|
11
12
|
- **Development and debugging**
|
13
|
+
- **Local message processing**
|
12
14
|
|
13
|
-
|
15
|
+
### STDOUT Transport
|
16
|
+
Publish-only transport for debugging and integration:
|
17
|
+
- **Debugging and logging**
|
18
|
+
- **Integration with external tools**
|
19
|
+
- **Development monitoring**
|
20
|
+
- **One-way message output**
|
21
|
+
|
22
|
+
The Memory transport keeps all message routing in-memory within the current Ruby process, while STDOUT transport outputs messages for external processing.
|
14
23
|
|
15
24
|
## Example Programs
|
16
25
|
|
@@ -32,7 +41,7 @@ These transports keep all message routing in-memory within the current Ruby proc
|
|
32
41
|
|
33
42
|
### 🛍️ 03_point_to_point_orders.rb
|
34
43
|
**Demonstrates:** Point-to-point messaging (1:1)
|
35
|
-
**Transport:**
|
44
|
+
**Transport:** MemoryTransport
|
36
45
|
- Order processing system between OrderService and PaymentService
|
37
46
|
- Request/response message pattern
|
38
47
|
- Automatic serialization of complex order data by transport
|
@@ -40,7 +49,7 @@ These transports keep all message routing in-memory within the current Ruby proc
|
|
40
49
|
|
41
50
|
### 📢 04_publish_subscribe_events.rb
|
42
51
|
**Demonstrates:** Publish-subscribe messaging (1:many)
|
43
|
-
**Transport:**
|
52
|
+
**Transport:** MemoryTransport
|
44
53
|
- User event notification system
|
45
54
|
- Multiple subscribers (EmailService, SMSService, AuditService)
|
46
55
|
- Event-driven architecture
|
@@ -48,13 +57,21 @@ These transports keep all message routing in-memory within the current Ruby proc
|
|
48
57
|
|
49
58
|
### 💬 05_many_to_many_chat.rb
|
50
59
|
**Demonstrates:** Many-to-many messaging patterns
|
51
|
-
**Transport:**
|
60
|
+
**Transport:** MemoryTransport
|
52
61
|
- Multi-user chat room system
|
53
62
|
- Message broadcasting to multiple participants
|
54
63
|
- User presence and room management
|
55
64
|
- Complex message routing scenarios
|
56
65
|
|
57
|
-
###
|
66
|
+
### 📤 06_stdout_publish_only.rb
|
67
|
+
**Demonstrates:** STDOUT transport publish-only usage
|
68
|
+
**Transport:** StdoutTransport (publish-only)
|
69
|
+
- Log message publishing to STDOUT
|
70
|
+
- Metrics publishing in JSON format
|
71
|
+
- Perfect for debugging and external tool integration
|
72
|
+
- Shows pretty-print vs JSON formatting options
|
73
|
+
|
74
|
+
### 🎨 16_pretty_print_demo.rb
|
58
75
|
**Demonstrates:** Message pretty-printing and debugging
|
59
76
|
**Transport:** None (utility demo)
|
60
77
|
- Shows SmartMessage's `pretty_print` method
|
@@ -64,7 +81,7 @@ These transports keep all message routing in-memory within the current Ruby proc
|
|
64
81
|
|
65
82
|
### ⚡ 07_proc_handlers_demo.rb
|
66
83
|
**Demonstrates:** Proc-based message handlers
|
67
|
-
**Transport:**
|
84
|
+
**Transport:** MemoryTransport
|
68
85
|
- Custom Proc handlers for message processing
|
69
86
|
- Dynamic message routing
|
70
87
|
- Flexible handler assignment
|
@@ -72,7 +89,7 @@ These transports keep all message routing in-memory within the current Ruby proc
|
|
72
89
|
|
73
90
|
### 📊 08_custom_logger_demo.rb
|
74
91
|
**Demonstrates:** Custom logging implementations
|
75
|
-
**Transport:**
|
92
|
+
**Transport:** MemoryTransport
|
76
93
|
- Multiple logger types and configurations
|
77
94
|
- Custom logger classes
|
78
95
|
- Log filtering and formatting
|
@@ -80,7 +97,7 @@ These transports keep all message routing in-memory within the current Ruby proc
|
|
80
97
|
|
81
98
|
### ❌ 09_error_handling_demo.rb
|
82
99
|
**Demonstrates:** Error handling strategies
|
83
|
-
**Transport:**
|
100
|
+
**Transport:** MemoryTransport
|
84
101
|
- Various error scenarios and recovery patterns
|
85
102
|
- Exception handling in message processors
|
86
103
|
- Error propagation and logging
|
@@ -88,7 +105,7 @@ These transports keep all message routing in-memory within the current Ruby proc
|
|
88
105
|
|
89
106
|
### 🎯 10_entity_addressing_basic.rb
|
90
107
|
**Demonstrates:** Basic entity addressing
|
91
|
-
**Transport:**
|
108
|
+
**Transport:** MemoryTransport
|
92
109
|
- Message routing by entity addresses
|
93
110
|
- Order processing with specific routing
|
94
111
|
- Customer and payment entity handling
|
@@ -96,7 +113,7 @@ These transports keep all message routing in-memory within the current Ruby proc
|
|
96
113
|
|
97
114
|
### 🔍 11_entity_addressing_with_filtering.rb
|
98
115
|
**Demonstrates:** Advanced entity addressing with filters
|
99
|
-
**Transport:**
|
116
|
+
**Transport:** MemoryTransport
|
100
117
|
- Complex filtering patterns
|
101
118
|
- Regex-based address matching
|
102
119
|
- Multiple entity types and routing rules
|
@@ -104,7 +121,7 @@ These transports keep all message routing in-memory within the current Ruby proc
|
|
104
121
|
|
105
122
|
### 🏢 12_regex_filtering_microservices.rb
|
106
123
|
**Demonstrates:** Microservices with regex filtering
|
107
|
-
**Transport:**
|
124
|
+
**Transport:** MemoryTransport
|
108
125
|
- Service-to-service communication patterns
|
109
126
|
- Regular expression-based routing
|
110
127
|
- Environment-based filtering (dev/staging/prod)
|
@@ -112,7 +129,7 @@ These transports keep all message routing in-memory within the current Ruby proc
|
|
112
129
|
|
113
130
|
### 📝 13_header_block_configuration.rb
|
114
131
|
**Demonstrates:** Header configuration with blocks
|
115
|
-
**Transport:** StdoutTransport
|
132
|
+
**Transport:** StdoutTransport (publish-only)
|
116
133
|
- Dynamic header configuration
|
117
134
|
- Block-based header modification
|
118
135
|
- Custom header fields
|
@@ -120,7 +137,7 @@ These transports keep all message routing in-memory within the current Ruby proc
|
|
120
137
|
|
121
138
|
### 🌍 14_global_configuration_demo.rb
|
122
139
|
**Demonstrates:** Global SmartMessage configuration
|
123
|
-
**Transport:**
|
140
|
+
**Transport:** MemoryTransport
|
124
141
|
- Global transport settings
|
125
142
|
- Configuration inheritance (serialization handled by transport)
|
126
143
|
- Default settings management
|
@@ -128,7 +145,7 @@ These transports keep all message routing in-memory within the current Ruby proc
|
|
128
145
|
|
129
146
|
### 📋 15_logger_demo.rb
|
130
147
|
**Demonstrates:** Logger configuration and usage
|
131
|
-
**Transport:** StdoutTransport
|
148
|
+
**Transport:** StdoutTransport (publish-only)
|
132
149
|
- Various logger configurations
|
133
150
|
- Log level management
|
134
151
|
- Custom log formatting
|