1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.linecorp.centraldogma.client.armeria;
17
18 import java.net.UnknownHostException;
19 import java.util.concurrent.ScheduledExecutorService;
20
21 import com.linecorp.armeria.client.ClientBuilder;
22 import com.linecorp.armeria.client.ClientRequestContext;
23 import com.linecorp.armeria.client.WebClient;
24 import com.linecorp.armeria.client.encoding.DecodingClient;
25 import com.linecorp.armeria.client.endpoint.EndpointGroup;
26 import com.linecorp.centraldogma.client.CentralDogma;
27 import com.linecorp.centraldogma.internal.client.ReplicationLagTolerantCentralDogma;
28
29
30
31
32
33 public final class ArmeriaCentralDogmaBuilder
34 extends AbstractArmeriaCentralDogmaBuilder<ArmeriaCentralDogmaBuilder> {
35
36
37
38
39
40 public CentralDogma build() throws UnknownHostException {
41 final EndpointGroup endpointGroup = endpointGroup();
42 final String scheme = "none+" + (isUseTls() ? "https" : "http");
43 final ClientBuilder builder =
44 newClientBuilder(scheme, endpointGroup, cb -> cb.decorator(DecodingClient.newDecorator()), "/");
45 final int maxRetriesOnReplicationLag = maxNumRetriesOnReplicationLag();
46
47
48
49 final ScheduledExecutorService blockingTaskExecutor = blockingTaskExecutor();
50
51 final CentralDogma dogma = new ArmeriaCentralDogma(blockingTaskExecutor,
52 builder.build(WebClient.class),
53 accessToken());
54 if (maxRetriesOnReplicationLag <= 0) {
55 return dogma;
56 } else {
57 return new ReplicationLagTolerantCentralDogma(
58 blockingTaskExecutor, dogma, maxRetriesOnReplicationLag,
59 retryIntervalOnReplicationLagMillis(),
60 () -> {
61
62
63 final ClientRequestContext ctx = ClientRequestContext.currentOrNull();
64 return ctx != null ? ctx.remoteAddress() : null;
65 });
66 }
67 }
68 }