[{"data":1,"prerenderedAt":178},["ShallowReactive",2],{"insights-list":3},[4,87,138],{"id":5,"title":6,"body":7,"description":78,"extension":79,"meta":80,"navigation":82,"path":83,"seo":84,"stem":85,"__hash__":86},"insights/insights/azure-event-driven-patterns.md","Event-driven patterns on Azure",{"type":8,"value":9,"toc":71},"minimark",[10,15,32,36,56,60],[11,12,14],"h2",{"id":13},"choosing-the-right-tool","Choosing the right tool",[16,17,18,19,23,24,27,28,31],"p",{},"Azure offers three main options for messaging and events: ",[20,21,22],"strong",{},"Service Bus"," (queues and topics), ",[20,25,26],{},"Event Grid"," (pub/sub, event routing), and ",[20,29,30],{},"Event Hubs"," (high-throughput streaming). The choice depends on throughput, ordering guarantees, and how tightly coupled you want producers and consumers to be.",[11,33,35],{"id":34},"practical-guidance","Practical guidance",[37,38,39,46,51],"ul",{},[40,41,42,43,45],"li",{},"Use ",[20,44,22],{}," when you need reliable delivery, FIFO per queue, or transactional patterns. Good for order processing, workflow orchestration.",[40,47,42,48,50],{},[20,49,26],{}," when you need fan-out, low latency, and event-sourced or reactive integrations. Good for notifying multiple subscribers, reacting to blob uploads or resource changes.",[40,52,42,53,55],{},[20,54,30],{}," when you're ingesting high-volume telemetry or streams. Overkill for most business events.",[11,57,59],{"id":58},"common-pitfalls","Common pitfalls",[37,61,62,65,68],{},[40,63,64],{},"Don't default to Event Hubs for simple pub/sub—Event Grid is simpler and cheaper.",[40,66,67],{},"Avoid building a custom abstraction over all three; pick one or two per bounded context and stick with it.",[40,69,70],{},"Consider at-least-once vs exactly-once semantics early; it affects your entire consumer design.",{"title":72,"searchDepth":73,"depth":73,"links":74},"",2,[75,76,77],{"id":13,"depth":73,"text":14},{"id":34,"depth":73,"text":35},{"id":58,"depth":73,"text":59},"When to use Service Bus, Event Grid, or Event Hubs—and how to avoid over-engineering your messaging layer.","md",{"date":81},"2025-02-18",true,"/insights/azure-event-driven-patterns",{"title":6,"description":78},"insights/azure-event-driven-patterns","svUaLsDkfp45VDsb0B5wQ6ohTevKzoVmuuxmPhpJNRw",{"id":88,"title":89,"body":90,"description":131,"extension":79,"meta":132,"navigation":82,"path":134,"seo":135,"stem":136,"__hash__":137},"insights/insights/dotnet-modular-monolith.md","Modular monoliths in .NET",{"type":8,"value":91,"toc":126},[92,96,104,108,119,123],[11,93,95],{"id":94},"why-consider-a-modular-monolith","Why consider a modular monolith",[16,97,98,99,103],{},"Microservices add operational overhead: distributed tracing, deployment pipelines per service, network failure handling. For many products, especially early-stage or SMEs, a well-structured monolith is faster to ship and easier to maintain. The key is to structure it so you ",[100,101,102],"em",{},"could"," extract modules later if needed.",[11,105,107],{"id":106},"structuring-modules","Structuring modules",[37,109,110,113,116],{},[40,111,112],{},"Each module is a vertical slice: its own folder (or project), its own domain types, its own persistence if appropriate.",[40,114,115],{},"Modules communicate via interfaces and events, not direct database access across boundaries.",[40,117,118],{},"Use .NET's minimal APIs or feature folders within a single ASP.NET Core app to keep routing simple.",[11,120,122],{"id":121},"when-to-evolve","When to evolve",[16,124,125],{},"If a module grows too large, has different scaling needs, or is owned by a different team, that's the time to consider extraction. By then you'll have clear boundaries and a migration path. Don't start with microservices \"because we might need them someday.\"",{"title":72,"searchDepth":73,"depth":73,"links":127},[128,129,130],{"id":94,"depth":73,"text":95},{"id":106,"depth":73,"text":107},{"id":121,"depth":73,"text":122},"A pragmatic alternative to microservices when your team is small and your domain is still evolving.",{"date":133},"2025-02-12","/insights/dotnet-modular-monolith",{"title":89,"description":131},"insights/dotnet-modular-monolith","XSt_7STRud49sVrg9PQlpZUE6d07vfJ1in9i4BjEsXk",{"id":139,"title":140,"body":141,"description":171,"extension":79,"meta":172,"navigation":82,"path":174,"seo":175,"stem":176,"__hash__":177},"insights/insights/example-post.md","Placeholder – an example insight on Azure architecture",{"type":8,"value":142,"toc":167},[143,147,155,159],[11,144,146],{"id":145},"placeholder-topic-overview","Placeholder – topic overview",[37,148,149,152],{},[40,150,151],{},"Placeholder – explain a concrete Azure or architecture scenario.",[40,153,154],{},"Placeholder – highlight a specific trade-off or decision pattern.",[11,156,158],{"id":157},"placeholder-practical-guidance","Placeholder – practical guidance",[37,160,161,164],{},[40,162,163],{},"Placeholder – 2–3 bullets of specific, opinionated advice.",[40,165,166],{},"Placeholder – link to related considerations or follow-up questions.",{"title":72,"searchDepth":73,"depth":73,"links":168},[169,170],{"id":145,"depth":73,"text":146},{"id":157,"depth":73,"text":158},"Placeholder – short, technical but accessible note on a specific architectural topic.",{"date":173},"2025-01-01","/insights/example-post",{"title":140,"description":171},"insights/example-post","R1sTSVUh3qqT28emaBTKtYDvtKYXMtinzQi_WZvJ2Ds",1772823101120]