Skip to content

EventHorizon.RocketMQ.Grpc 0.4.0

Choose a tag to compare

@eventhorizon-cli eventhorizon-cli released this 09 Aug 10:30
69804b7

Behavior

  • Add the released Java java-5.2.1 duration-carrying consume result. ConsumeResult is now a sealed record with Success, Failure, and Suspend(TimeSpan); suspend durations must be at least 50 milliseconds.
  • Keep non-FIFO retry/DLQ progression service-owned for both regular Push and LitePush. Regular Push normalizes Suspend to Failure; non-FIFO LitePush ignores the requested Suspend duration and uses the same retry-policy NACK path as Failure.
  • Keep FIFO Failure progression client-owned for regular Push and LitePush: retry the handler locally, then attempt DLQ forwarding after the effective attempt limit.
  • FIFO LitePush applies Suspend(duration) through ChangeInvisibleDuration with suspend=true and suspends unprocessed same-LiteTopic siblings from the current receive batch without invoking them.
  • Preserve FIFO when optional grouping metadata is absent by using the authoritative subscription setting and a physical-queue fallback key.
  • Record retry-policy settlement as nack and FIFO caller-duration suspension as suspend. Failed completion remains unresolved and can be redelivered.

Compatibility

This is an intentional pre-1.0 breaking API change. ConsumeResult is no longer an enum. Existing returns of ConsumeResult.Success and ConsumeResult.Failure remain straightforward, but enum switches and APIs that require an enum must be updated for the sealed-record result shape.

Validation

  • Rechecked the official java-5.2.1 GitHub release as non-draft and non-prerelease and audited LitePushConsumerImpl, ProcessQueueImpl, and FifoConsumeService at that tag.
  • PR CI passed formatting, build, all unit and .NET 8 checks, Codecov, and all four single-/multi-Broker Docker integration suites.
  • Focused live coverage verifies regular FIFO/non-FIFO DLQ, Lite FIFO/non-FIFO DLQ, and FIFO Lite Suspend timing and receipt replacement. Retry-exhaustion cases fail the initial attempt and one retry before DLQ progression.

Two remaining intentional differences from released Java are tracked in #25, including the bounded completion-RPC retry lifetime.

Full change: PR #27

NuGet: https://www.nuget.org/packages/EventHorizon.RocketMQ.Grpc/0.4.0