- Request Caching -- Will likely be implemented using xPike caching interfaces and rely on any existing caching you may have in place, since xPike already supports client-side caching with proper invalidation.
- Dashboard -- Will likely never be included in NHystrix. Instead, the ability to report circuit breaker state to an APM of your choice will be included.
Support for HttpClientFactory in Asp.Net Core.
Redesigned HystrixDelegatingHandler
to use an instance of HttpHystrixCommand
which subclasses HystrixCommand
.
This also required breaking changes to how HystrixCommands are created and executed. Most existing commands shouldn't
break, but be aware their could be issues and test accordingly.
Fixed a bug in HystrixCommandGroup.AddCommandKey
where multiple keys didn't get added.
Extracted HttpClient support into its own library.
Support for .Net Core 3.0.
Multi-Targeted for older supported frameworks and tooling:
- net452
- net461
- netStandard2.0
- netCoreApp3.0
Asychronous execution support using the IHystrixCommand.Queue()
method. This method is non-blocking uses a producer/consumer pattern
under the hood. A callback action can invoked when the command completes.
There are some pretty major breaking changes in this release as we bring more of the Hystrix functionality and design into the APIs. We've also deviated from the original Hystrix implementation a bit more and use typed exceptions rather than a single HystrixRuntimeException and an enum.
We'll try to keep breaking changes to a minimum going forward unless it's to fix a major design flaw or to greatly improve reliability, performance, and usability. No promises :) If breaking it makes it better, we'll do it. At least until we reach a 1.0 release.
- A delegating message handler for HttpClient (
HystrixDelegatingHandler
) that implements- Circuit Breaker Pattern
- Bulkhead Pattern
- Metrics
- Expanded the
IHystrixCircuitBreaker
beyond the original Netflix version - Typed Exceptions
Execute()
andExecuteAsync()
methods now accept an optional request parameter. This allows aHystrixCommand
to be a Singleton and the request passed into Execute() rather than the constructor.
-
The circuit breaker properties have been refactored in to their own class
CircuitBreakerOptions
. TheHystrixCommandProperties
now has a property of typeCircuitBreakerOptions
. This eliminates confusion as to exactly which configuration properties directly affect the circuit breaker and only those options are passed to theHystrixCircuitBreaker
on construction. We will likely do the same in metrics in a future release when metrics is built out further. -
Timeouts now throw a
HystrixTimeoutException
instead of aSystem.TimoutException
.HystrixTimeoutException
derives fromHystrixRuntimeException
and ensures theHystrixCommand
doesn't double count when exceptions are rethrown. -
When fallback is disabled, the original exception is wrapped in a HystrixRuntimeExtension or subclass rather than just throwing the original exception.
-
HystrixCommand
has an additional generic type parameter for the request.
- HystrixCommand with:
- Circuit Breaker Pattern (https://docs.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker)
- Bulkhead Pattern (https://docs.microsoft.com/en-us/azure/architecture/patterns/bulkhead)
- Timeouts
- Minimum metrics required to support the Circuit Breaker