Skip to content

Commit 80e5c68

Browse files
committed
Merge branch 'master' into release-candidate-21.0.0-RC2
2 parents 90b18a3 + 224fae2 commit 80e5c68

File tree

8 files changed

+74
-11
lines changed

8 files changed

+74
-11
lines changed

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,21 @@ nakadi-producer:
130130
access-token-uri: https://token.auth.example.org/oauth2/access_token
131131
```
132132
133+
By default, the initialized Fahrschein Nakadi client uses the `SimpleRequestFactory` with `ContentEncoding.GZIP`.
134+
If you want to override this setting (e.g. to enable zstd compression), you can create an overwriting configuration property:
135+
```yaml
136+
nakadi-producer:
137+
content-encoding: ZSTD
138+
```
139+
If you want to disable compression completely:
140+
```yaml
141+
nakadi-producer:
142+
content-encoding: IDENTITY
143+
```
144+
As we gain experience, the default value might change in future versions of this library, so if you need to stay on gzip compression, use `content-encoding: GZIP`.
145+
146+
Alternatively, you can define your own bean of type `RequestFactory`, which will then be used instead of ours.
147+
133148
#### OAuth (scope) configuration in a non-Zalando environment
134149
Please consult the [manual of Zalando's tokens library](https://github.com/zalando/tokens) for more configuration options (like `CREDENTIALS_DIR` or via environment variables.
135150

nakadi-producer-spring-boot-starter/src/main/java/org/zalando/nakadiproducer/NakadiProducerAutoConfiguration.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
2424
import org.springframework.scheduling.annotation.EnableScheduling;
2525
import org.zalando.fahrschein.NakadiClient;
26+
import org.zalando.fahrschein.NakadiClientBuilder;
27+
import org.zalando.fahrschein.http.api.ContentEncoding;
28+
import org.zalando.fahrschein.http.api.RequestFactory;
29+
import org.zalando.fahrschein.http.simple.SimpleRequestFactory;
2630
import org.zalando.nakadiproducer.eventlog.EventLogWriter;
2731
import org.zalando.nakadiproducer.eventlog.impl.EventLogRepository;
2832
import org.zalando.nakadiproducer.eventlog.impl.EventLogRepositoryImpl;
@@ -55,8 +59,8 @@ static class FahrscheinWithTokensNakadiClientConfiguration {
5559

5660
@Bean
5761
public NakadiPublishingClient nakadiProducerPublishingClient(AccessTokenProvider accessTokenProvider,
58-
@Value("${nakadi-producer.nakadi-base-uri}") URI nakadiBaseUri) {
59-
return new FahrscheinNakadiPublishingClient(NakadiClient.builder(nakadiBaseUri)
62+
@Value("${nakadi-producer.nakadi-base-uri}") URI nakadiBaseUri, RequestFactory requestFactory) {
63+
return new FahrscheinNakadiPublishingClient(NakadiClient.builder(nakadiBaseUri, requestFactory)
6064
.withAccessTokenProvider(accessTokenProvider::getAccessToken).build());
6165
}
6266

@@ -70,7 +74,14 @@ public StupsTokenComponent accessTokenProvider(
7074
@Value("${nakadi-producer.access-token-scopes:uid}") String[] accessTokenScopes) {
7175
return new StupsTokenComponent(accessTokenUri, Arrays.asList(accessTokenScopes));
7276
}
77+
78+
}
79+
@Bean
80+
@ConditionalOnMissingBean
81+
RequestFactory requestFactory(@Value("${nakadi-producer.encoding:GZIP}") ContentEncoding encoding){
82+
return new SimpleRequestFactory(encoding);
7383
}
84+
7485
}
7586

7687
@ConditionalOnMissingBean(NakadiPublishingClient.class)
@@ -164,5 +175,4 @@ public EventTransmissionService eventTransmissionService(
164175
public FlywayMigrator flywayMigrator() {
165176
return new FlywayMigrator();
166177
}
167-
168178
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package org.zalando.nakadiproducer;
2+
3+
import lombok.SneakyThrows;
4+
import org.apache.commons.lang3.reflect.FieldUtils;
5+
import org.junit.jupiter.api.Test;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.boot.test.context.SpringBootTest;
8+
import org.zalando.fahrschein.http.api.ContentEncoding;
9+
import org.zalando.fahrschein.http.api.RequestFactory;
10+
import org.zalando.nakadiproducer.config.EmbeddedDataSourceConfig;
11+
12+
import static org.hamcrest.MatcherAssert.assertThat;
13+
import static org.hamcrest.Matchers.is;
14+
15+
// this class has no @ActiveProfiles("test"), so it doesn't use the MockNakadiClient.
16+
@SpringBootTest(
17+
webEnvironment = SpringBootTest.WebEnvironment.MOCK,
18+
properties = {
19+
"nakadi-producer.scheduled-transmission-enabled:false",
20+
// as we are not defining a mock nakadi client, we need to provide these properties:
21+
"nakadi-producer.encoding:ZSTD",
22+
"nakadi-producer.nakadi-base-uri:http://nakadi.example.com/",
23+
},
24+
classes = { TestApplication.class, EmbeddedDataSourceConfig.class }
25+
)
26+
public class NakadiClientContentEncodingIT {
27+
28+
@Autowired
29+
private RequestFactory requestFactory;
30+
31+
@Test
32+
@SneakyThrows
33+
public void pickUpContentEncodingFromConfig() {
34+
final ContentEncoding contentEncoding =
35+
(ContentEncoding) FieldUtils.readField(requestFactory, "contentEncoding", true);
36+
assertThat(contentEncoding, is(ContentEncoding.ZSTD));
37+
}
38+
}

nakadi-producer-spring-boot-starter/src/test/java/org/zalando/nakadiproducer/TestApplication.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
55

66
@SpringBootApplication
7-
@EnableNakadiProducer
87
public class TestApplication {
98

109
public static void main(final String[] args) {

nakadi-producer-spring-boot-starter/src/test/java/org/zalando/nakadiproducer/config/MockNakadiClientConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22

33
import org.springframework.context.annotation.Bean;
44
import org.springframework.context.annotation.Configuration;
5+
import org.springframework.context.annotation.Profile;
56
import org.zalando.nakadiproducer.transmission.MockNakadiPublishingClient;
67
import org.zalando.nakadiproducer.transmission.NakadiPublishingClient;
78

89
@Configuration
10+
// we only want this in the tests which actually want a mock, i.e. ones which have a "test" profile.
11+
@Profile("test")
912
public class MockNakadiClientConfig {
1013
@Bean
1114
public NakadiPublishingClient nakadiClient() {

nakadi-producer-starter-spring-boot-2-test/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
<dependency>
3232
<groupId>org.springframework.boot</groupId>
3333
<artifactId>spring-boot-starter-jdbc</artifactId>
34-
<version>2.5.5</version>
34+
<version>2.5.6</version>
3535
</dependency>
3636
<dependency>
3737
<groupId>com.opentable.components</groupId>

nakadi-producer/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
<dependency>
4545
<groupId>org.zalando</groupId>
4646
<artifactId>fahrschein</artifactId>
47-
<version>0.18.0</version>
47+
<version>0.24.0</version>
4848
</dependency>
4949
<dependency>
5050
<groupId>org.projectlombok</groupId>

nakadi-producer/src/main/java/org/zalando/nakadiproducer/transmission/MockNakadiPublishingClient.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@
44
import com.fasterxml.jackson.core.JsonProcessingException;
55
import com.fasterxml.jackson.databind.DeserializationFeature;
66
import com.fasterxml.jackson.databind.ObjectMapper;
7-
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
8-
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
7+
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
98
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
10-
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
119
import org.springframework.util.LinkedMultiValueMap;
1210
import org.springframework.util.MultiValueMap;
1311

@@ -54,9 +52,9 @@ private String transformToJson(Object value) {
5452

5553
private static ObjectMapper createDefaultObjectMapper() {
5654
final ObjectMapper objectMapper = new ObjectMapper();
57-
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
55+
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
5856
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
59-
objectMapper.registerModules(new Jdk8Module(), new ParameterNamesModule(), new JavaTimeModule());
57+
objectMapper.registerModules(new JavaTimeModule());
6058
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
6159
return objectMapper;
6260
}

0 commit comments

Comments
 (0)