Advanced (अपडेट: 19/7/2026)

Claude Code से EC orders के लिए Azure Service Bus design करें

EC orders, inventory, DLQ, duplicate detection और retry rules को Azure Service Bus में अलग करें।

Claude Code से EC orders के लिए Azure Service Bus design करें

EC store में order screen, inventory CSV, shipping request, mail log और retry note अलग-अलग जगह होते हैं। अगर email failure के लिए पूरा order event फिर भेज दिया जाए, तो stock दो बार reserve हो सकता है। यह article Azure Service Bus को order, stock और retry की सरल table में बदलता है।

EC order flow कहाँ टूटता है

  • order accepted, inventory reserve, shipping request, mail send और retry को एक ही queue में मत मिलाएँ।
  • जब एक order को stock, shipping, mail और analytics में बाँटना हो तो topic ठीक है।
  • MessageId order id, line item id और action से stable बनाइए।
  • dead-letter queue जाँच की जगह है, अंधा resend button नहीं।
  • Claude Code table बनाए; payment, refund, personal data और approval human देखें।

The Microsoft documentation for Service Bus overview, queues, topics, and subscriptions, dead-letter queues, duplicate detection, message transfers, and pricing tiers is the source base. The internal Azure memo pattern is also related to the Azure OpenAI privacy memo.

Claude Code क्या करे और human क्या देखे

EC store में order screen, inventory CSV, shipping request, mail log और retry note अलग-अलग जगह होते हैं। अगर email failure के लिए पूरा order event फिर भेज दिया जाए, तो stock दो बार reserve हो सकता है। यह article Azure Service Bus को order, stock और retry की सरल table में बदलता है। Claude Code should read column names, event names, retry samples, and DLQ reason text. It should not receive card data, full address text, refund judgment, or credentials. The output should be a table with event name, input columns, queue or topic, subscription, MessageId, DLQ owner, retry condition, and human review.

Humans keep payment state, refund permission, privacy policy, stock finalization, warehouse contract, apology text, and release approval. This split matters because a technically valid retry can still be a business mistake. The table makes the stop point visible before production.

तीन use case

Use case 1

Order accepted कई काम शुरू करता है। Input: order CSV, order id, line item, SKU, quantity, payment status, mail flag। Output: topic:orders और inventory, shipping, mail subscriptions। Human check: unpaid order, preorder, bundle, gift, manual stock change, mail copy।

Use case 2

Inventory reserve के लिए stable business key चाहिए। Input: order id, line item, SKU, quantity, reserve action, send log। Output: MessageId table, जैसे order id plus line item plus reserve। Human check: quantity change, cancellation, reorder, bundle split, stock return।

Use case 3

DLQ operations team को पढ़ने लायक होनी चाहिए। Input: reason, description, order id, SKU, fail count, time, memo। Output: auto retry, fix then retry, hold order, refund review, dev investigation। Human check: customer notice, refund, stock gap, warehouse, resend right।

कॉपी करने वाला prompt

You are preparing an Azure Service Bus design memo for an EC store.
Inputs: order CSV columns, inventory CSV columns, event names, retry logs, DLQ reason samples, and planned Azure tier.
Output:
1. Event table with eventName, input columns, queue or topic, subscription, MessageId, and DLQ owner.
2. Human review table for payment, refund, personal data, stock finalization, customer notice, and resend approval.
3. MessageId naming rules based on order id, line item id, and action.
4. DLQ classification: auto retry, fix then retry, hold order, refund review, engineering investigation.
5. One first action that can be done in 30 minutes.
Rules: do not put card data or full address text in messages. Do not blindly resend every DLQ message.

जाँच code

const events = [
  { type: "order.accepted", orderId: "ORD-1001", lineItemId: "1", sku: "TSHIRT-M", quantity: 2, action: "accept" },
  { type: "inventory.reserve", orderId: "ORD-1001", lineItemId: "1", sku: "TSHIRT-M", quantity: 2, action: "reserve" },
  { type: "inventory.reserve", orderId: "ORD-1001", lineItemId: "1", sku: "TSHIRT-M", quantity: 2, action: "reserve" },
  { type: "mail.send", orderId: "ORD-1001", lineItemId: "", sku: "", quantity: 0, action: "confirmation" },
  { type: "inventory.reserve", orderId: "", lineItemId: "2", sku: "MUG-BLUE", quantity: 1, action: "reserve" },
  { type: "shipping.requested", orderId: "ORD-1002", lineItemId: "1", sku: "BAG-BK", quantity: 1, action: "ship" }
];

function routeEvent(event) {
  if (event.type === "order.accepted") {
    return {
      entity: "topic:orders",
      messageId: event.orderId + ":accepted",
      reason: "fan out to inventory, shipping, mail, and analytics subscriptions"
    };
  }
  if (event.type === "inventory.reserve") {
    return {
      entity: "queue:inventory-reserve",
      messageId: event.orderId + ":" + event.lineItemId + ":reserve",
      reason: "one stock reservation worker should own this line item"
    };
  }
  if (event.type === "mail.send") {
    return {
      entity: "queue:mail-send",
      messageId: event.orderId + ":" + event.action,
      reason: "mail can retry without touching stock"
    };
  }
  return {
    entity: "needs-design-review",
    messageId: event.orderId + ":" + event.type,
    reason: "route is not documented yet"
  };
}

const seen = new Set();
const findings = [];

for (const event of events) {
  const route = routeEvent(event);
  if (!event.orderId) {
    findings.push({
      type: "missing-order-id",
      eventType: event.type,
      fix: "do not send this message until the order id is present"
    });
  }
  if (seen.has(route.messageId)) {
    findings.push({
      type: "duplicate-message-id",
      eventType: event.type,
      messageId: route.messageId,
      fix: "keep the same MessageId for sender retry, but make the handler idempotent"
    });
  }
  if (route.entity === "needs-design-review") {
    findings.push({
      type: "unknown-route",
      eventType: event.type,
      fix: "decide queue, topic subscription, DLQ owner, and retry rule before release"
    });
  }
  seen.add(route.messageId);
}

console.table(findings);
if (findings.length > 0) process.exitCode = 1;

Pitfall: आम गलती

The first cause is one queue for every action. The fix is to use a topic for order accepted and separate queues or subscriptions for inventory, shipping, and mail. This prevents a mail retry from touching stock again.

The second cause is random MessageId generation. The fix is to generate the id from order id, line item id, and action before sending. Duplicate detection can only help inside the configured window when the id stays stable.

The third cause is blind DLQ resend. The fix is to classify each reason into auto retry, fix then retry, hold order, refund review, or engineering investigation. Messages that affect customers or refunds need human review.

The fourth cause is ignoring tier differences. The fix is to check whether topics, transactions, de-duplication, or sessions are required before choosing Basic, Standard, or Premium.

FAQ

Q. Should every EC event be a topic? A. No. Topic is useful when one event fans out. A queue is clearer when one worker owns one task such as inventory reservation or mail send.

Q. Does duplicate detection remove all double stock moves? A. No. It helps when MessageId is stable. The handler should still check whether the line item was already processed.

Q. Who should read DLQ? A. Operations and developers. EC failures can involve customer notice, refund, stock gap, and warehouse contact.

Q. What should message body contain? A. Prefer order id, line item id, SKU, quantity, and reference id. Review personal data and logging policy before adding sensitive text.

consultation path

EC team के लिए मूल्य cloud diagram में नहीं, गलत stock और late shipping कम करने में है। CSV columns, तीन failed messages और current retry steps consultation page पर लेकर आएँ। Use Claude Code training and consultation when the team needs help turning order CSV, inventory CSV, retry logs, and release approval into a workflow.

मैंने क्या verify किया

मैंने Service Bus overview, queues/topics/subscriptions, DLQ, duplicate detection, transfers और pricing tiers की Microsoft Learn pages देखीं। Local code missing order id, duplicate MessageId और unknown route दिखाता है। पहला कदम order, stock, mail और retry की एक table बनाना है।

#claude-code #EC #Azure Service Bus #orders #inventory
मुफ़्त

मुफ़्त PDF: Claude Code cheatsheet

Email डालें और commands, review habits तथा safe workflow वाली एक-page PDF पाएँ.

हम आपका data सुरक्षित रखते हैं और spam नहीं भेजते.

Masa

लेखक के बारे में

Masa

Claude Code workflow और team adoption पर काम करने वाला engineer.