feat: add Microservices Bulkhead pattern (#3228) - #3597
Conversation
PR SummaryAdded a new microservices-bulkhead module implementing the Bulkhead pattern to isolate downstream dependencies with dedicated bounded thread pools. Introduces Changes
autogenerated by presubmit.ai |
There was a problem hiding this comment.
🚨 Pull request needs attention.
Review Summary
Files Processed (14)
- microservices-bulkhead/README.md (1 hunk)
- microservices-bulkhead/etc/microservices-bulkhead.urm.puml (1 hunk)
- microservices-bulkhead/pom.xml (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/App.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/Bulkhead.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/BulkheadFullException.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/InventoryService.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/PaymentService.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/RemoteService.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/AppTest.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/BulkheadTest.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/InventoryServiceTest.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/PaymentServiceTest.java (1 hunk)
- pom.xml (1 hunk)
Actionable Comments (2)
-
microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/App.java [64-69]
readability: "Logger naming consistency with Lombok"
-
microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/Bulkhead.java [105-110]
readability: "Logger naming inconsistency in Bulkhead"
Skipped Comments (0)
|
Note on the automated review comments: |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #3597 +/- ##
============================================
+ Coverage 83.79% 83.87% +0.07%
- Complexity 4277 4308 +31
============================================
Files 1121 1126 +5
Lines 15144 15259 +115
Branches 723 730 +7
============================================
+ Hits 12690 12798 +108
- Misses 2159 2162 +3
- Partials 295 299 +4 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
94d0736 to
3ada5e2
Compare
|
Follow-up on the Codecov note: added five |
3ada5e2 to
9532148
Compare
|
The last CI run failed in |
There was a problem hiding this comment.
🚨 Pull request needs attention.
Review Summary
Files Processed (14)
- microservices-bulkhead/README.md (1 hunk)
- microservices-bulkhead/etc/microservices-bulkhead.urm.puml (1 hunk)
- microservices-bulkhead/pom.xml (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/App.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/Bulkhead.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/BulkheadFullException.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/InventoryService.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/PaymentService.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/RemoteService.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/AppTest.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/BulkheadTest.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/InventoryServiceTest.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/PaymentServiceTest.java (1 hunk)
- pom.xml (1 hunk)
Actionable Comments (4)
-
microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/App.java [64-64]
bug: "Logger name mismatch with Lombok"
-
microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/InventoryService.java [38-38]
bug: "Logger name mismatch in InventoryService"
-
microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/PaymentService.java [51-51]
bug: "Logger name mismatch in PaymentService"
-
microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/Bulkhead.java [105-111]
bug: "Logger name consistency in Bulkhead"
Skipped Comments (0)
9532148 to
4cd5d56
Compare
|
Coverage follow-up: added |
There was a problem hiding this comment.
🚨 Pull request needs attention.
Review Summary
Files Processed (14)
- microservices-bulkhead/README.md (1 hunk)
- microservices-bulkhead/etc/microservices-bulkhead.urm.puml (1 hunk)
- microservices-bulkhead/pom.xml (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/App.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/Bulkhead.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/BulkheadFullException.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/InventoryService.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/PaymentService.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/RemoteService.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/AppTest.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/BulkheadTest.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/InventoryServiceTest.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/PaymentServiceTest.java (1 hunk)
- pom.xml (1 hunk)
Actionable Comments (1)
-
microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/App.java [60-69]
readability: "Logger field name mismtach with Lombok SLF4J"
Skipped Comments (2)
-
microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/InventoryService.java [36-39]
readability: "Logger field naming mismatch in InventoryService"
-
microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/PaymentService.java [50-59]
readability: "Logger field naming mismatch in PaymentService"
Shutdown now cancels the queued futures so callers do not hang, a shutdown racing a submit is no longer counted as a rejection, and interrupted inventory checks are logged. The class diagram is a rendered PNG.
565f429 to
0165376
Compare
There was a problem hiding this comment.
🚨 Pull request needs attention.
Review Summary
Commits Considered (2)
- 0165376: fix: cancel queued calls on bulkhead shutdown
Shutdown now cancels the queued futures so callers do not hang, a shutdown racing a submit is no longer counted as a rejection, and interrupted inventory checks are logged. The class diagram is a rendered PNG.
Files Processed (15)
- microservices-bulkhead/README.md (1 hunk)
- microservices-bulkhead/etc/microservices-bulkhead.urm.png (0 hunks)
- microservices-bulkhead/etc/microservices-bulkhead.urm.puml (1 hunk)
- microservices-bulkhead/pom.xml (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/App.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/Bulkhead.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/BulkheadFullException.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/InventoryService.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/PaymentService.java (1 hunk)
- microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/RemoteService.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/AppTest.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/BulkheadTest.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/InventoryServiceTest.java (1 hunk)
- microservices-bulkhead/src/test/java/com/iluwatar/bulkhead/PaymentServiceTest.java (1 hunk)
- pom.xml (1 hunk)
Actionable Comments (6)
-
microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/App.java [64-64]
best_practice: "Logger naming mismatch with Lombok @slf4j"
-
microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/App.java [71-71]
best_practice: "Logger naming mismatch in multiple logging sites"
-
microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/Bulkhead.java [105-110]
best_practice: "Logger naming mismatch in Bulkhead - debug path"
-
microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/Bulkhead.java [116-121]
best_practice: "Logger naming mismatch in Bulkhead - warn path"
-
microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/InventoryService.java [38-38]
best_practice: "Logger naming mismatch in InventoryService"
-
microservices-bulkhead/src/main/java/com/iluwatar/bulkhead/PaymentService.java [51-51]
best_practice: "Logger naming mismatch in PaymentService"
What does this PR do?
Adds the Microservices Bulkhead pattern as a new
microservices-bulkheadmodule.Bulkhead, a dedicated fixed-size thread pool with a bounded queue. When the compartment is full the call fails fast withBulkheadFullExceptioninstead of blocking or borrowing threads from other compartments.Bulkhead: named, boundedThreadPoolExecutor(threads + queue), fail-fast rejection, metrics (active, queued, rejected),AutoCloseable.BulkheadFullException: unchecked exception carrying the compartment name.RemoteService,PaymentService(slow),InventoryService(healthy): simulated downstream dependencies.App: runs the same load first through one shared pool (inventory call gets rejected) and then through dedicated bulkheads (payment overflow rejected fast, inventory keeps answering), with log output tracing every step.README.md: intent, real-world example, sequence diagram, code walkthrough, applicability, trade-offs, related patterns. PlantUML class diagram underetc/.AppTest.pom.xml../mvnw clean verify -pl microservices-bulkheadpasses locally on JDK 21 and inside aneclipse-temurin:21container.Fixes #3228