All notable changes to the project will be documented in this file. This project adheres to Semantic Versioning.
Server.Handler()
now uses the standardcontext.Context
mechanism to detect when a request has been cancelled, instead of the deprecatedhttp.CloseNotifier
.
Server.Unregister
method for removing aRepository
registration and optionally forcing clients to disconnect.Server.PublishWithAcknowledgement
method for ensuring that an action does not happen until an event has been dispatched.
- Fixed a race condition in which
Server
might close a channel while another goroutine is trying to write to it. This would happen if you registered aRepository
that replays events, started a handler, then closed theServer
while the events were still replaying. - Improved unit test coverage.
Server.MaxConnTime
is an optional setting to make theServer
automatically close any stream connection that has stayed open for at least that amount of time. This may be useful in preventing server instances from accumulating too many connections in a load-balanced environment.
- The only changes in this release are to the test dependencies, to avoid bringing in unnecessary transitive dependencies such as
go-sdk-common
. Some of the test dependencies are now modules that can only be used in Go 1.13+, which means that the test build for this project only runs in Go 1.13+, but it can still be imported by projects that use older Go versions.
- Added
go.mod
so this package can be consumed as a module. This does not affect code that is currently consuming it viago get
,dep
, orgovendor
.
- An error in the backoff logic added in v1.4.0 could cause a panic after many successive retries, due to the exponential backoff value exceeding
math.MaxInt64
resulting in a negative number being passed torandom.Int63n
.
- New option
StreamOptionErrorHandler
provides an alternate way to receive errors and control howStream
behaves after an error. - New
Stream
methodRestart()
provides a way to make the stream reconnect at any time even if it has not detected an error, using the same retry semantics (backoff, jitter, etc.) that have already been configured.
- New option
StreamOptionUseBackoff
allowsStream
to be configured to use exponential backoff for reconnections. There was existing logic for exponential backoff, but it was not working, so until now the retry delay was always the same; for backward compatibility with that behavior, the default is still to not use backoff. - The new option
StreamOptionRetryResetInterval
can be used in conjunction withStreamOptionUseBackoff
to determine when, if ever, the retry delay can be reset to its initial value rather than continuing to decrease. - New option
StreamOptionUseJitter
tellsStream
to subtract a pseudo-random amount from the retry delay. - New option
StreamOptionCanRetryFirstConnection
tellsStream
that it can retry the initial connection attempt. Previously, a failed initial connection would be considered a permanent failure.
NewDecoderWithOptions
allows creating aDecoder
with non-default settings; currently the only such setting isDecoderOptionReadTimeout
. Normally you will not need to create aDecoder
directly; it is done automatically byStream
.
- Reverted an unintentional change in v1.1.0 to the signature of the exported function
NewDecoder
.
- It is now possible to specify a read timeout for a stream. If the stream does not receive new data (either events or comments) within this interval, it will emit an error and restart the connection.
- New stream constructor methods
SubscribeWithURL
andSubscribeWithRequestAndOptions
allow any combination of optional configuration parameters to be specified for a stream: read timeout, initial retry delay, last event ID, HTTP client, logger.
- Avoid trying to to decode non-200 responses which was generating extra error messages.
Initial release of this fork.
- Added support for Close() method.