[{"data":1,"prerenderedAt":198},["ShallowReactive",2],{"article-eadapter-single-outbound-url-relay":3},{"id":4,"title":5,"author":6,"body":7,"category":181,"description":182,"extension":183,"featured":184,"image":185,"meta":186,"navigation":187,"path":188,"publishedAt":189,"readingTime":190,"seo":191,"stem":192,"tags":193,"videoUrl":185,"__hash__":197},"articles\u002Farticles\u002Feadapter-single-outbound-url-relay.md","CargoWise Will Only Send Outbound Messages to ONE URL. Here's the Fix.","Don Dappa",{"type":8,"value":9,"toc":173},"minimark",[10,14,27,32,35,43,47,83,98,102,145,148,152,155,158],[11,12,13],"p",{},"CargoWise's Outbound Service configuration accepts a single SOAP endpoint URL. Not one per message type. Not one per recipient. One URL, for everything the instance will ever emit.",[11,15,16,17,21,22,26],{},"The setting lives at ",[18,19,20],"code",{},"Maintain > System > Registry > eServices > eAdaptor > Outbound Service URL"," — and the first integration never notices the constraint. You point the URL at your webhook receiver and move on. The problem surfaces the day a ",[23,24,25],"em",{},"second"," system needs the same events: accounting wants invoice messages, the customer portal wants milestones, the BI pipeline wants everything. CargoWise offers no fan-out. If you change the URL, you move the entire firehose.",[28,29,31],"h2",{"id":30},"never-point-the-url-at-a-business-system","Never point the URL at a business system",[11,33,34],{},"The outbound URL is a scarce, load-bearing resource. The moment two consumers exist, whoever owns that endpoint owns everyone's uptime — and repointing it during business hours drops in-flight messages for every downstream consumer at once.",[11,36,37,38,42],{},"The fix is architectural, not configurational: put a ",[39,40,41],"strong",{},"relay you own"," on the end of that URL, and give every consumer its own feed from the relay.",[28,44,46],{"id":45},"the-relay-does-four-things-and-nothing-else","The relay does four things — and nothing else",[48,49,50,57,71,77],"ol",{},[51,52,53,56],"li",{},[39,54,55],{},"Receive and acknowledge fast."," Unwrap the SOAP envelope, persist the raw XML, return success. Target under a second.",[51,58,59,62,63,66,67,70],{},[39,60,61],{},"Classify."," Read the message type (",[18,64,65],{},"UniversalShipment"," \u002F ",[18,68,69],{},"UniversalEvent",") and routing hints.",[51,72,73,76],{},[39,74,75],{},"Queue per consumer."," One delivery job per subscribed consumer, on a durable queue (RabbitMQ, SQS, Azure Service Bus — not a cron job and a database table).",[51,78,79,82],{},[39,80,81],{},"Deliver with retries."," Each consumer gets an independent retry budget (3–5 attempts, exponential backoff) and its own dead-letter queue.",[11,84,85,86,89,90,93,94,97],{},"Routing rules belong in a subscription ",[23,87,88],{},"table",", not in ",[18,91,92],{},"if"," statements — a new consumer becomes an ",[18,95,96],{},"INSERT",", not a deploy.",[28,99,101],{"id":100},"what-this-buys-you-at-2am","What this buys you at 2am",[88,103,104,117],{},[105,106,107],"thead",{},[108,109,110,114],"tr",{},[111,112,113],"th",{},"Failure",[111,115,116],{},"Recovery with a relay",[118,119,120,129,137],"tbody",{},[108,121,122,126],{},[123,124,125],"td",{},"Consumer down for 4 hours",[123,127,128],{},"Its queue backs up and drains on recovery. Others unaffected.",[108,130,131,134],{},[123,132,133],{},"Poison message",[123,135,136],{},"Lands in that consumer's DLQ with the raw XML attached. Everyone else keeps flowing.",[108,138,139,142],{},[123,140,141],{},"A burst of redelivered messages",[123,143,144],{},"Dedup at the door absorbs it. Zero duplicates downstream.",[11,146,147],{},"The alternative — every failure mode shared by every consumer through one URL — is how \"the portal is down\" becomes \"accounting is missing invoices\" by lunchtime.",[28,149,151],{"id":150},"buy-or-build","Buy or build?",[11,153,154],{},"This problem is solved commercially: Complect's eAdapter Relay is purpose-built for it, and Chain.io offers relay-as-a-service with CW connectors. The honest field guidance: smaller forwarders should consider a managed option before building. If you build, use a real message queue with dead-letter support from day one.",[156,157],"hr",{},[11,159,160,163,164,167,168],{},[39,161,162],{},"Want the full blueprint?"," Chapter 2 of ",[23,165,166],{},"eAdapter in Production"," (Vol 2 of the CargoWise eAdapter Series) covers the complete relay architecture — the receive handler, the subscription table, loop prevention, idempotency and replay, and the 12-point go-live checklist. ",[169,170,172],"a",{"href":171},"\u002Feadapter\u002Fproduction-ops?channel=article_relay","Join the Vol 2 waitlist for early-bird pricing →",{"title":174,"searchDepth":175,"depth":175,"links":176},"",2,[177,178,179,180],{"id":30,"depth":175,"text":31},{"id":45,"depth":175,"text":46},{"id":100,"depth":175,"text":101},{"id":150,"depth":175,"text":151},"technical","The eAdapter Outbound Service accepts exactly one endpoint for everything your instance emits. The relay architecture every multi-system shop ends up building — explained.","md",false,null,{},true,"\u002Farticles\u002Feadapter-single-outbound-url-relay","2026-08-17",5,{"title":5,"description":182},"articles\u002Feadapter-single-outbound-url-relay",[194,195,196],"CargoWise eAdapter","integration architecture","middleware","wBpH4roqrei5W210wA1Dgp8ta5b7V64YkZmMAUQoDN8",1787680136130]