Let's face it: most "resilient" microservice designs are still losing data.
It is not that developers aren't trying. They are. You see it in the endless retry logic, idempotency tokens, and circuit breakers piled into every service. You see it in all the apologetic blog posts explaining why 'eventual consistency' is a feature, not a bug.
But here is the uncomfortable truth: these patterns are treating the symptoms, not the disease. If you've ever faced duplicate messages, inconsistent state across services, or the dreaded partial failure in a distributed system, then you have seen it up close.
The root cause? Missing transactionality.
In the world of microservices and light-weight infrastructure, a lot of teams think they should roll their own eventual consistency "patterns" - let's call this "custom eventual consistency". So they end up coding a lot that needs to be tested for border-case scenarios. Even if this is done, the result rarely covers all cases, and not everybody wants to maintain this kind of code.
How do I manage distributed transactions?
Synchronous microservices look great on paper.
They are easy to read, easy to debug, and they map perfectly to how we think: “I send a request, I get a reply.” No surprises, right?
Except when things go wrong. Which in distributed systems is most of the time.
You can now see the pool's percentage used (wrt its capacity) in our Micrometer support module.
The ability to see the pool's percentage used (wrt its capacity) was already present in our JMX module, but not in our Micrometer support. This has now been added.
None.
| Severity: | 4 |
|---|---|
| Affected version(s): | 6.0.113 |
You can now use the new Spring Boot 3.4 starter.
None.
| Severity: | 3 |
|---|---|
| Affected version(s): | 6.0.x |
The error message on potential timeouts is now better.
Some cases would report an error like "The transaction has timed out - try increasing the timeout if needed" when in fact the cause was a wrong state of the transaction.
This has been improved to also show state information:
"The transaction has potentially timed out (state: " + state + ") - try increasing the timeout if needed"
None.
| Severity: | 2 |
|---|---|
| Affected version(s): | 6.0.x |
The implementation of this class is now safer for multi-threaded use.
None.
| Severity: | 4 |
|---|---|
| Affected version(s): | 6.0.x |
The port number has been corrected in the README of the tomcat examples.
The README file would contain port 8080 instead of 8888. This has been fixed.
None.
| Severity: | 4 |
|---|---|
| Affected version(s): | 6.0.x |
The new Tomcat examples should now include the right Atomikos release.
Due to an issue with maven plugins, the examples would not always ship the right Atomikos release. This has now been fixed.
None.
| Severity: | 4 |
|---|---|
| Affected version(s): | 6.0.x |
The OSGi examples are now skipped during the build.
The OSGi examples used bundle dependencies hosted on a Spring repository site that has been discontinued. This made the build fail. Until we find a solution, we had to disable this module during the build (or releases would be blocked).
| Severity: | 4 |
|---|---|
| Affected version(s): | 6.0.x |
The zip files with example projects failed to upload.
When trying to download the example projects from the installation page(s) you will get "404 Not Found" errors. We are looking into it but decided not to let this block a maintenance release like this one.