Microservices Life Beyond Distributed Transactions: An Apostate's Implementation - Dispatcher Failure Recovery Posts in this series: * A Primer * Document Coordination * Document Example * Dispatching Example * Failures and Retries * Failure Recovery * Sagas * Relational Resources * Conclusion Sample code from this series In the last post, we looked at how we can recover from exceptions from inside our code handling messages. We perform some action in
Architecture Life Beyond Distributed Transactions: An Apostate's Implementation - Failures and Retries Posts in this series: * A Primer * Document Coordination * Document Example * Dispatching Example * Failures and Retries * Failure Recovery * Sagas * Relational Resources * Conclusion Sample code from this series In the last post, we looked at an example of dispatching document messages to other documents using a central dispatcher. Our example worked well
Microservices Life Beyond Distributed Transactions: An Apostate's Implementation - Dispatching Example Posts in this series: * A Primer * Document Coordination * Document Example * Dispatching Example * Failures and Retries * Failure Recovery * Sagas * Relational Resources * Conclusion Sample code from this series In the last post, we looked at refactoring our documents to use messaging to communicate changes. We're still missing something, however -
Microservices Life Beyond Distributed Transactions: An Apostate's Implementation - Document Example Posts in this series: * A Primer * Document Coordination * Document Example * Dispatching Example * Failures and Retries * Failure Recovery * Sagas * Relational Resources * Conclusion Sample code from this series In the last post, I walked through the "happy path" scenario of coordinated communication/activities between multiple resources that otherwise can'
Distributed Systems Life Beyond Distributed Transactions: An Apostate's Implementation - Document Coordination Posts in this series: * A Primer * Document Coordination * Document Example * Dispatching Example * Failures and Retries * Failure Recovery * Sagas * Relational Resources * Conclusion Sample code from this series Quick note - I've updated this post to use the more accurate term "Document" than the less-accurate, DDD-specific term "
Distributed Systems Life Beyond Distributed Transactions: An Apostate's Implementation - A Primer Posts in this series: * A Primer * Document Coordination * Document Example * Dispatching Example * Failures and Retries * Failure Recovery * Sagas * Relational Resources * Conclusion Sample code from this series For those working with SQL databases, working with transactions is more or less a given. The most we may need to worry about is:
MediatR MediatR 5.1 Released This release changes the default behavior of awaiting an enumerable of Task. Previous to this release, tasks where awaited using Task.WhenAll. This causes problems in a variety of environments and situations that expect sequential ordering. In this release, the default behavior for enumerables is to await in a foreach,
OSS Contoso University Examples with CQRS, MediatR, AutoMapper and more I was a bit surprised yesterday to see Scott Hanselman's post on my Contoso University sample app. That application basically takes the traditional Contoso University sample applications (of which there have been many), and try to adapt it to how our "normal" ASP.NET applications are
Docker Containers - What Are They Good For? Running Our CI Builds In the last post, I looked at creating a build environment, settling on a strategy where I used Docker Compose to create our build environment. From there, I need some way to actually run our build in an environment. Typically, my Windows build run in some sort of hosted agent,
AutoMapper AutoMapper extensions for Microsoft DI 5.0 released Hot off the presses, with some pretty big breaking changes. For the unfamiliar, the AutoMapper.Extensions.Microsoft.DependencyInjection package is the extension to the MS DI libraries used by ASP.NET Core and others. It lets you do: services.AddMvc(); services.AddAutoMapper(); And this package finds all AutoMapper configuration in
Docker Containers - What Are They Good For? Crafting our Build Environments In the last post, I looked at what comes "out of the box" with the Docker support in Visual Studio. While what we saw makes a lot sense for a good "F5" story, it's not that great for an actual build environment. In a
AutoMapper AutoMapper 7.0 Released Today I pushed out the AutoMapper 7.0 release: Release notes This release is mainly bug fixes, but keeping with the last few major releases, has a few breaking API changes. The major breaking API change is breaking out the expression mapping (OData support) so that it can release independently
MediatR MediatR 5.0 Released Another milestone for MediatR, I released 5.0 over the weekend. This release simplifies a number of interfaces and methods, but introduced some breaking changes along the way. The major change for MediatR in 5.0 is the combination of void requests to directly implement IRequest<Unit>. In
Architecture Vertical Slice Architecture Many years back, we started on a new, long term project, and to start off with, we built the architecture around an onion architecture. Within a couple of months, the cracks started to show around this style and we moved away from that architecture and towards CQRS (before it had
Docker Containers - What Are They Good For? Build Environments? In the last post, I looked at how containers could make local development easier for our typical projects, and mainly found they work well for dependencies. Next up, I wanted to see if they could make our continuous integration server "better". Better, as in, faster, more reliable, more
Microservices The False Dichotomy of Monoliths and Microservices When learning about microservices, you're nearly always introduced to the concept of a monolith. If you're not doing microservices, you're building a monolith. If you're not building a monolith, you must go with microservices. If you're building a monolith, perhaps
ASP.NET Core Migrating Contoso University Example to Razor Pages A coworker noticed that it looked like Razor Pages were the new "recommended" way of building server-side rendered web applications in ASP.NET Core 2.0. I hadn't paid much attention because at first glance they looked like Web Forms. However, that's not the
Microservices My Microservices FAQ Mainly because I get asked all the time about microservices and I'm tired of having to remember on the spot: What is a microservice? A microservice is a service with a design focus towards the smallest autonomous boundary. What is a service? (From Clemens) A service is software
Docker Containers - What Are They Good For? Local Dependencies Containers, huh, good god What is it good for? Local Dependencies! * Edwin Starr (also disputed) In the last post, I walked through our typical development pipeline, from local dev to production: Now for most of our developers, when we start a new project, we can just continue to work on
Docker Containers - What Are They Good For? Containers, huh, good god What is it good for? Probably something? * Edwin Starr (disputed) Here at Headspring, we're seeing more and more usage of Docker for local development. Having not really touched Docker or containers, I wanted to understand how Docker could help make our lives easier for
respawn How Respawn Works This post is mainly a reminder to myself when inevitably I forget what I was doing when designing Respawn. The general problem space is something I've covered quite a lot, but I haven't really walked through how Respawn works internally. The general problem is trying to
respawn Respawn 3.0 Released Respawn, the intelligent database deleter, reached the 3.0 milestone today. In this release, Respawn now supports complex circular/cyclical relationships. When Respawn detects a cycle in the graph, it substitutes a separate deletion strategy by disabling/enabling foreign key constraints just for those tables affected. This release also adds
Microservices Designing Microservice Messages: A Primer When you move from monoliths to microservices, and your services aren't 100% isolated from each other, eventually you need your microservices to communicate. They need to expose their capabilities to other applications and systems, and when you get to this point, you need to design their means of
Agile The Gemba Walk for Designing Software The Gemba Walk is a common lean practice for understanding a current process as-is before taking any action to improve that process. Traditionally, you'd see this in lean manufacturing, where you'd walk through a process, in-person, to understand the purpose, process, and people involved in creating
OSS Respawn 2.0 released A small release for Respawn but there's a breaking change in the underlying extension API, hence the major version bump. A couple things added here: * Support for MySQL * Support for Amazon RDS (from a bug fixed) The API change was added so that database adapters can specify the