98 lines
3.3 KiB
Julia
98 lines
3.3 KiB
Julia
#!/usr/bin/env julia
|
|
# Test script for dictionary transfer from Julia serviceA to Julia serviceB
|
|
# Demonstrates the "Command & Control" scenario (small dictionary) using NATSBridge
|
|
#
|
|
# This is serviceB - the receiver that receives a dummy dictionary from serviceA
|
|
|
|
using NATSBridge
|
|
using UUIDs
|
|
using JSON
|
|
using Dates
|
|
|
|
# Include the NATSBridge module
|
|
include("src/NATSBridge.jl")
|
|
|
|
# Configuration
|
|
const SUBJECT = "/NATSBridge_dict_test"
|
|
const NATS_URL = "nats://localhost:4222"
|
|
|
|
# Helper: Log with correlation ID
|
|
function log_trace(correlation_id::String, message::String)
|
|
timestamp = Dates.now()
|
|
println("[$timestamp] [Correlation: $correlation_id] $message")
|
|
end
|
|
|
|
|
|
# Receiver: Receive and process dictionary from serviceA
|
|
function receive_dictionary()
|
|
# Connect to NATS
|
|
conn = NATS.connect(NATS_URL)
|
|
|
|
# Subscribe to the subject
|
|
subscription = NATS.subscribe(conn, SUBJECT)
|
|
|
|
println("Listening for dictionary messages on '$SUBJECT'...")
|
|
println("Press Ctrl+C to stop listening.")
|
|
|
|
# Listen for messages
|
|
while true
|
|
# Wait for a message with a 1-second timeout
|
|
msg = NATS.waitfor(subscription, 1.0)
|
|
|
|
if msg !== nothing
|
|
# Extract correlation ID for logging
|
|
json_data = JSON.parse(String(msg.payload))
|
|
cid = json_data["correlationId"]
|
|
|
|
log_trace(cid, "Received message from $(json_data["senderName"])")
|
|
|
|
# Process the message using smartreceive
|
|
payloads = NATSBridge.smartreceive(
|
|
msg;
|
|
fileserverDownloadHandler = (url, max_retries, base_delay, max_delay, cid) ->
|
|
NATSBridge._fetch_with_backoff(url, max_retries, base_delay, max_delay, cid),
|
|
max_retries = 5,
|
|
base_delay = 100,
|
|
max_delay = 5000
|
|
)
|
|
|
|
log_trace(cid, "Processed $(length(payloads)) payload(s)")
|
|
|
|
# Process each payload
|
|
for (dataname, data, payload_type) in payloads
|
|
log_trace(cid, "Payload '$dataname' type: $payload_type")
|
|
|
|
# Handle dictionary type
|
|
if payload_type == "dictionary"
|
|
println("\nReceived dictionary:")
|
|
println(JSON.json(data, 2))
|
|
|
|
# Extract and display specific fields
|
|
if isa(data, Dict)
|
|
command = get(data, "command", "unknown")
|
|
println("\nCommand: $command")
|
|
|
|
# Optionally send acknowledgment
|
|
reply_to = get(json_data, "replyTo", "")
|
|
if !isempty(reply_to)
|
|
log_trace(cid, "Reply to: $reply_to")
|
|
# Could send ACK here
|
|
end
|
|
end
|
|
else
|
|
println("\nReceived non-dictionary payload: $dataname (type: $payload_type)")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
# Run the receiver
|
|
println("Starting dictionary receiver...")
|
|
println("Subject: $SUBJECT")
|
|
println("NATS URL: $NATS_URL")
|
|
println("="^50)
|
|
|
|
# Run receiver (this will block and listen for messages)
|
|
receive_dictionary() |