-
Notifications
You must be signed in to change notification settings - Fork 138
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Adrian Cole <adrian@tetrate.io>
- Loading branch information
Adrian Cole
committed
May 14, 2024
1 parent
3164cc8
commit b0b25d0
Showing
7 changed files
with
111 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
67 changes: 67 additions & 0 deletions
67
webflux6-micrometer/src/main/java/brave/example/ZipkinDiscoveryConfiguration.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
package brave.example; | ||
|
||
import java.net.URI; | ||
import java.util.LinkedHashMap; | ||
import java.util.Map; | ||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; | ||
import org.springframework.cloud.client.ServiceInstance; | ||
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; | ||
import org.springframework.context.annotation.Bean; | ||
import org.springframework.context.annotation.Configuration; | ||
import zipkin2.reporter.HttpEndpointSupplier; | ||
import zipkin2.reporter.HttpEndpointSuppliers; | ||
|
||
@Configuration(proxyBeanMethods = false) | ||
@ConditionalOnProperty("EUREKA_SERVICE_URL") | ||
public class ZipkinDiscoveryConfiguration { | ||
|
||
/** | ||
* It is very difficult to stop loadbalancer or discovery from initializing when starters are on | ||
* the classpath. This is a workaround to disable it when EUREKA_SERVICE_URL is not set. | ||
*/ | ||
static Map<String, Object> discoveryProperties() { | ||
Map<String, Object> properties = new LinkedHashMap<>(); | ||
String eurekaServiceUrl = System.getenv("EUREKA_SERVICE_URL"); | ||
boolean eurekaEnabled = eurekaServiceUrl != null && !eurekaServiceUrl.isEmpty(); | ||
if (eurekaEnabled) { | ||
properties.put("eureka.client.serviceUrl.defaultZone", eurekaServiceUrl); | ||
} | ||
properties.put("spring.cloud.loadbalancer.enabled", eurekaEnabled); | ||
properties.put("spring.cloud.discovery.enabled", eurekaEnabled); | ||
return properties; | ||
} | ||
|
||
@Bean HttpEndpointSupplier.Factory loadbalancerEndpoints(LoadBalancerClient loadBalancerClient) { | ||
LoadBalancerHttpEndpointSupplier.Factory httpEndpointSupplierFactory = | ||
new LoadBalancerHttpEndpointSupplier.Factory(loadBalancerClient); | ||
// don't ask more than 30 seconds (just to show) | ||
return HttpEndpointSuppliers.newRateLimitedFactory(httpEndpointSupplierFactory, 30); | ||
} | ||
|
||
record LoadBalancerHttpEndpointSupplier(LoadBalancerClient loadBalancerClient, URI virtualURL) | ||
implements HttpEndpointSupplier { | ||
record Factory(LoadBalancerClient loadBalancerClient) implements HttpEndpointSupplier.Factory { | ||
|
||
@Override public HttpEndpointSupplier create(String endpoint) { | ||
return new LoadBalancerHttpEndpointSupplier(loadBalancerClient, URI.create(endpoint)); | ||
} | ||
} | ||
|
||
@Override public String get() { | ||
// At least spring-cloud-netflix wants the actual hostname as a lookup value | ||
ServiceInstance instance = loadBalancerClient.choose(virtualURL.getHost()); | ||
if (instance != null) { | ||
return instance.getUri() + virtualURL.getPath(); | ||
} | ||
throw new IllegalArgumentException( | ||
virtualURL.getHost() + " is not an instance registered in Eureka"); | ||
} | ||
|
||
@Override public void close() { | ||
} | ||
|
||
@Override public String toString() { | ||
return "LoadBalancer{" + virtualURL + "}"; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters