private EventRecord<String> wrapIntAsEvent(final int sequenceNum) { return new EventRecord<>( "streamId", sequenceNum, sequenceNum, "intEvent", UUID.randomUUID(), Instant.now(), ImmutableMap.of(), Integer.toString(sequenceNum)); }
@Override public void processEvents(final List<EventRecord<T>> list) { logger.info("Seeing {} events", list.size()); lastSeenValue = list.get(list.size() - 1).getEvent(); totalEvents += list.size(); sleep(100); }
private EventRecord<T> fromEsEvent(final ResolvedEvent event) { int streamVersion; int aggregateVersion; if (event.isResolved()) { aggregateVersion = event.event.eventNumber; streamVersion = event.link.eventNumber; } else { aggregateVersion = event.event.eventNumber; streamVersion = event.event.eventNumber; } return new EventRecord<>( fromEsStreamId(event.event.eventStreamId), streamVersion, aggregateVersion, event.event.eventType, event.event.eventId, event.event.created, fromEsMetadata(event.event.metadata), fromEsData(event.event.data)); }
@Test @Ignore // Manual only public void testRetriesOnHandlerErrorWithBackoff() { EventRepository<String> repository = mock(EventRepository.class); EventSubscriptionPositionSource positionSource = mock(EventSubscriptionPositionSource.class); when(repository.getPublisher(any())).then(position -> { WorkQueueProcessor<EventRecord<String>> processor = WorkQueueProcessor.create(); Flux<EventRecord<String>> eventSource = Flux .fromStream(IntStream.range(0, 1000000).mapToObj(this::wrapIntAsEvent)) .doOnNext(e -> { lastProducedValue = e.getEvent(); }); eventSource.subscribe(processor); return processor; }); when(positionSource.getSubscriptionPosition()).thenReturn(null); ErroringSubscriptionHandler<String> subscriptionHandler = new ErroringSubscriptionHandler<>(0); EventSubscriptionManager subscriptionManager = new EventSubscriptionManager<>( repository, positionSource, subscriptionHandler, new SubscriptionWorkerConfig().withBatchSize(64)); SubscriptionToken token = subscriptionManager.start(); sleep(100000); token.stop(); }
TestEvent testEvent3 = new TestEvent("test3"); ImmutableList<EventRecord<TestEvent>> batch1Events = ImmutableList.of( new EventRecord<>( AGGREGATE_ID_1, 3, 1, "test1", UUID.randomUUID(), Instant.now(), ImmutableMap.of(), testEvent1), new EventRecord<>( AGGREGATE_ID_1, 4, 1, "test1", UUID.randomUUID(), Instant.now(), ImmutableMap.of(), testEvent2)); ImmutableList<EventRecord<TestEvent>> batch2Events = ImmutableList.of( new EventRecord<>( AGGREGATE_ID_1, 3, 1, "test1", UUID.randomUUID(), Instant.now(), ImmutableMap.of(), testEvent3));
@Test public void readFirstEvent() { append(new TestEventType("payload-1")); append(new TestEventType("payload-2")); EventRecord<TestEventType> actual = repository.readFirst(streamId); assertThat(actual.getEvent().getValue(), equalTo("payload-1")); }
TestEvent testEvent2 = new TestEvent("test2"); ImmutableList<EventRecord<TestEvent>> events = ImmutableList.of( new EventRecord<>( AGGREGATE_ID_1, 3, 1, "test1", UUID.randomUUID(), Instant.now(), ImmutableMap.of(), testEvent1), new EventRecord<>( AGGREGATE_ID_1, 4, 1, "test1", UUID.randomUUID(), Instant.now(), ImmutableMap.of(), testEvent2));
@Test public void readFirstEvent() { append(new TestEventType("payload-1")); append(new TestEventType("payload-2")); EventRecord<TestEventType> actual = repository.readFirst(streamId); assertThat(actual.getEvent().getValue(), equalTo("payload-1")); }
private EventRecord<T> fromEsEvent(final Event event) { int streamVersion; int aggregateVersion; if (event instanceof ResolvedEvent) { ResolvedEvent resolvedEvent = (ResolvedEvent) event; aggregateVersion = resolvedEvent.linkedEvent().number().value(); streamVersion = resolvedEvent.linkEvent().number().value(); } else { aggregateVersion = event.number().value(); streamVersion = event.number().value(); } return new EventRecord<>( fromEsStreamId(event.streamId().streamId()), streamVersion, aggregateVersion, event.data().eventType(), event.data().eventId(), fromEsTimestamp(event.created()), fromEsMetadata(event.data().metadata()), fromEsDataContent(event.data().data())); }
@Test public void readLastEvent() { append(new TestEventType("payload-1")); append(new TestEventType("payload-2")); EventRecord<TestEventType> actual = repository.readLast(streamId); assertThat(actual.getEvent().getValue(), equalTo("payload-2")); }
private EventRecord<T> fromEsEvent(final Event event) { int streamVersion; int aggregateVersion; if (event instanceof ResolvedEvent) { ResolvedEvent resolvedEvent = (ResolvedEvent) event; aggregateVersion = resolvedEvent.linkedEvent().number().value(); streamVersion = resolvedEvent.linkEvent().number().value(); } else { aggregateVersion = event.number().value(); streamVersion = event.number().value(); } return new EventRecord<>( fromEsStreamId(event.streamId().streamId()), streamVersion, aggregateVersion, event.data().eventType(), event.data().eventId(), fromEsTimestamp(event.created()), fromEsMetadata(event.data().metadata()), fromEsDataContent(event.data().data())); }
@Test public void readLastEvent() { append(new TestEventType("payload-1")); append(new TestEventType("payload-2")); EventRecord<TestEventType> actual = repository.readLast(streamId); assertThat(actual.getEvent().getValue(), equalTo("payload-2")); }
.map(EventSubscriptionUpdate::ofEvent)) .doOnNext(e -> { lastProducedValue = e.getEvent().getEvent(); }); eventSource.subscribe(processor);
@Test @Ignore // Manual only public void testRetriesOnStreamError() { EventRepository<String> repository = mock(EventRepository.class); EventSubscriptionPositionSource positionSource = mock(EventSubscriptionPositionSource.class); when(repository.getPublisher(any())).then(position -> { WorkQueueProcessor<EventRecord<String>> processor = WorkQueueProcessor.create(); Flux<EventRecord<String>> eventSource = Flux .fromStream(IntStream.range(0, 1000000).mapToObj(this::wrapIntAsEvent)) .doOnNext(e -> { lastProducedValue = e.getEvent(); }); eventSource.subscribe(processor); return processor.take(100).thenMany(Flux.error(new RuntimeException("fail!"))); }); when(positionSource.getSubscriptionPosition()).thenReturn(null); SlowSubscriptionHandler<String> subscriptionHandler = new SlowSubscriptionHandler<>(); EventSubscriptionManager subscriptionManager = new EventSubscriptionManager<>( repository, positionSource, subscriptionHandler, new SubscriptionWorkerConfig().withBatchSize(64)); SubscriptionToken token = subscriptionManager.start(); sleep(100000); token.stop(); }
.map(EventSubscriptionUpdate::ofEvent)) .doOnNext(e -> { lastProducedValue = e.getEvent().getEvent(); }); eventSource.subscribe(processor);