- Updates to SDK 2.0.4 (except SQS and S3 as these are not yet available)
- Updates from old synchronous KinesisClient to new KinesisAsyncClient
- Adds possibility to configure a RetryPolicy for Kinesis
- Updates to aws-java-sdk-preview-12
- Fixes naming of
MessageQueueReceiverEndpoint
beans using@EnableMessageQueueReceiverEndpoint
annotations - Separated configuration of event sources and message queues. In case of annotation-based configuration,
nothing has to be changed. Only if no
EnableEventSource
annotation is used, the auto-configuration must now be triggered by adding the newEnableEventSourcing
annotation to one of your Spring configurations. - Added annotations-based configuration of
MessageSenderEndpoints
using the new annotationEnableMessageSenderEndpoint
. Both Kinesis and SQS message senders are supported and automatically configured. - Removed dependency to
de.otto.edison:edison-aws-s3
. The configuration has changed as follows:aws.region
renamed tosynapse.aws.region
aws.profile
renamed tosynapse.aws.profile
MessageSenderEndpoint.send(Message)
andMessageSenderEndpoint.sendBatch(Stream<Message>)
are now returning CompletableFuture.
- Fixes startup of application context when eventsources are missing or not available
- Log times required to consume streams at startup
- Adds annotation @EnableMessageQueueReceiverEndpoint to auto-configure SQS message-queue receivers
- Adds annotation @MessageQueueConsumer to auto-configure SQS message-queue listeners
- Adds message tracing for SQS queues to sender- and receiver-endpoints
- Adds combined message trace for all sender and receiver channels
- Introduces synapse-testsupport with separate in-memory configurations for message logs and message queues
Breaking Change: Beans need to be qualified.
- Register two MessageSenderEndpointFactories:
- kinesisMessageSenderEndpointFactory for Kinesis
- sqsMessageSenderEndpointFactory for SQS
- Fix bug in KinesisShardIterator. Read next record when there is no data near the part of the shard pointed to by the ShardIterator. See https://docs.aws.amazon.com/streams/latest/dev/troubleshooting-consumers.html#getrecords-returns-empty.
- Fix name for InMemoryMessageSenderFactory in InMemoryTestConfiguration to override kinesisSenderEndpointFactory in autowiring
- Update dependency to edison-aws 0.4.1 which works with AWS SDK preview 10
- Updated to AWS SDK preview 10
- Added support for AWS SQS with SqsMessageSender and SqsMessageQueueReceiverEndpoint
- New KinesisMessageLogReader for low-level polling of Kinesis messages.
- Refactored interfaces for
EventSource
andMessageLogReceiverEndpoint
. The interfaces now immediately return a CompletedFuture instead of blocking forever. - Add StartFrom AT-POSITION to access entries in the stream directly
- Add ConditionalOnMissingBean to ObjectMapper in SynapseAutoConfiguration
- Fixes bug that don't create a new message when retry with a corrupt byte buffer
- Adds message traces for sender- and receiver endpoints to Edison µServices.
- Fixes bug that SnapshotAutoConfiguration is not injecting the ApplicationEventPublisher into SnapshotMessageStore instances created by the SnapshotMessageStoreFactory.
- Log message meta data when put to kinesis failed
- Fixes bug in MessageReceiverEndpointInfoProvider resulting in a broken presentation of status details.
- Disabling of synapse-edison is now more consistent. The different Health Indicators can now be disabled using the
following properties:
StartUpHealthIndicator
: synapse.edison.health.startup.enabled=falseSnapshotReaderHealthIndicator
: synapse.edison.health.snapshotreader.enabled=falseMessageReceiverEndpointHealthIndicator
: synapse.edison.health.messagereceiver.enabled=false
- Introduced interfaces for MessageEndpoint, MessageReceiverEndpoint, MessageLogReceiverEndpoint and MessageQueueReceiverEndpoints.
- Refactored the creation of EventSources: The associated MessageLogReceiverEndpoints are now registered in the ApplicationContext, so it is possible to inject these into other beans.
- Removed
EnableEventSource#builder()
and replaced it by an auto-configuration of the newMessageSenderEndpointFactory
andMessageLogReceiverEndpointFactory
instances, together with the (also new) general-purposeDefaultEventSource
implementation that is replacing the different otherEventSource
implementations. - Simplified the configuration of in-memory implementations of the different endpoints for
testing purposes. It is now possible to just add
@ImportAutoConfiguration(InMemoryTestConfiguration.class)
to your test configuration to do this. - Removed
Predicate
fromEventSource
andMessageLogReceiverEndpoint
interfaces and replaced it byconsumeUntil()
methods taking anInstant
as a parameter to stop message retrieval at a specified timestamp. - Removed
durationBehind
from channel- and shard-positions. - Introduced type
ChannelDurationBehind
that is used in notifications to announce the duration that consumers are behind of the channel head position. - Renamed
EventSourcingHealthIndicator
toMessageReceiverEndpointHealthIndicator
- Introduced
SnapshotReaderHealthIndicator
- Renamed
EventSourcingStatusDetailIndicator
toMessageReceiverStatusDetailIndicator
- Introduced
SnapshotStatusDetailIndicator
- Refactored eventsource notifications and separated them into
SnapshotReaderNotification
andMessageReceiverNotification
.
- Added
StartupHealthIndicator
that is unhealthy until all EventSources are (almost) up to date. - Added possibility to consume MessageLogs from timestamp
- Fixed problem that the KinesisShardIterator will not recover after an exception is thrown
- Introduced MessageEndpointConfigurer used to register MessageInterceptors at MessageSender- and/or MessageReceiverEndpoints.
- Added MessageFilter as a special implementation of a MessageInterceptor that is used to filter messages depending on a Predicate
- Using key-value pairs in (some) log messages
- Speedup snapshot creation and log progress
- Introduce special SnapshotEventSourceNotification that additionally holds the timestamp of snapshot creation.
- Renamed project to OTTO Synapse:
- eventsourcing-core -> synapse-core
- eventsourcing-aws -> synapse-aws
- eventsourcing-edison-integration -> synapse-edison
- Renamed packages to de.otto.synapse.*
- Renamed properties to synapse.*
- Introduced eventsourcing-aws and removed aws-specific parts from eventsourcing-/synapse-core
- Renamed Event to Message and removed EventBody
- [eventsourcing-edison-integration] Add health indicator for stream state. This means that a service goes unhealthy if a stream is in a not-recoverable state.
- [eventsourcing-core] Fix retry policy in
KinesisShardIterator
to retry also on connection errors, not only on throughput exceed errors.
Remove Clock
bean as this is required only for tests.
Don't set StatusDetailIndicator to warn when kinesis consumer has finished.
Add Clock
bean that is required by EventSourcingStatusDetailIndicator
- New sub project
eventsourcing-edison-integration
. This project contains aStatusDetailIndicator
that provides StatusDetail information for each EventSource.
- Also publish EventSourceNotification Application Events for Kinesis and InMemory EventSources
- Remove further ChronicleMap closed errors on shutdown.
- Prevent ChronicleMap closed errors on shutdown.
- Add
sendEvents
method toEventSender
interface.
- Breaking changes:
- Change signature of
KinesisEventSender.sendEvents
. Send events takes a list ofEventBody
now - Split Event class into
Event
andEventBody
CompactionService
now requires aStateRepository
with namecompactionStateRepository
- Change signature of
- InMemory EventSender and EventSource for testing
- Events with "null"-payload will delete the entry.
- Remove client side encryption because kinesis now supports server side encryption.
SnapshotReadService
now allows to set a local snapshot file to read from instead retrieving it from AWS S3.
This functionality was moved fromSnapshotEventSource
and also works for aCompactingKinesisEventSource
now.
- Provide
EncryptedOrPlainJsonTextEncryptor
that checks whether data is plain json or is encrypted.
- Add option to send unencrypted events to
KinesisEventSender.sendEvent(String, Object, boolean)
andKinesisEventSender.sendEvents(Map<String,Object>, boolean)
- Fix statistics
- Clear state repository after compaction job
- Released to keep things stable
Initial Release