Skip to content

Commit 788a912

Browse files
authored
Merge pull request #96 from reactive-commons/feature/fix-health
Fix health check, update name generator
2 parents 143248f + a9fa253 commit 788a912

File tree

18 files changed

+118
-69
lines changed

18 files changed

+118
-69
lines changed

async/async-commons/src/main/java/org/reactivecommons/async/commons/utils/NameGenerator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ private static String generateName(String applicationName, String suffix) {
2020
bb.putLong(uuid.getMostSignificantBits())
2121
.putLong(uuid.getLeastSignificantBits());
2222
// Convert to base64 and remove trailing =
23-
return applicationName+"-"+ suffix + "-" + encodeToUrlSafeString(bb.array())
23+
String realSuffix = suffix != null && !"".equals(suffix) ? suffix + "." : "";
24+
return applicationName+"."+ realSuffix + encodeToUrlSafeString(bb.array())
2425
.replace("=", "");
2526
}
2627

async/async-commons/src/test/java/org/reactivecommons/async/commons/utils/NameGeneratorTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ class NameGeneratorTest {
1010
void generateNameFromWithoutSuffix() {
1111
String result = NameGenerator.generateNameFrom("application");
1212
assertFalse(result.contains("="));
13-
assertTrue(result.startsWith("application--"));
14-
assertEquals(35, result.length());
13+
assertTrue(result.startsWith("application."));
14+
assertEquals(34, result.length());
1515
}
1616

1717
@Test
1818
void generateNameFromWithSuffix() {
1919
String result = NameGenerator.generateNameFrom("application", "suffix");
2020
assertFalse(result.contains("="));
21-
assertTrue(result.startsWith("application-suffix-"));
21+
assertTrue(result.startsWith("application.suffix."));
2222
assertEquals(41, result.length());
2323
}
2424
}

async/async-rabbit-starter-eda/src/main/java/org/reactivecommons/async/rabbit/config/ConnectionManager.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,12 @@ public void setDiscardNotifier(String domain, DiscardNotifier discardNotifier) {
3636
getChecked(domain).setDiscardNotifier(discardNotifier);
3737
}
3838

39-
public ConnectionManager addDomain(String domain, ReactiveMessageListener listener, ReactiveMessageSender sender) {
39+
public ConnectionManager addDomain(String domain, ReactiveMessageListener listener, ReactiveMessageSender sender,
40+
ConnectionFactoryProvider provider) {
4041
connections.put(domain, DomainConnections.builder()
4142
.listener(listener)
4243
.sender(sender)
44+
.provider(provider)
4345
.build());
4446
return this;
4547
}
@@ -65,7 +67,7 @@ public DiscardNotifier getDiscardNotifier(String domain) {
6567
return getChecked(domain).getDiscardNotifier();
6668
}
6769

68-
public ConnectionFactoryProvider getProvider(String domain) {
69-
return getChecked(domain).getProvider();
70+
public Map<String, DomainConnections> getProviders() {
71+
return connections;
7072
}
7173
}

async/async-rabbit-starter-eda/src/main/java/org/reactivecommons/async/rabbit/config/RabbitHealthConfig.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.reactivecommons.async.rabbit.config;
22

3-
import org.reactivecommons.async.rabbit.health.RabbitReactiveHealthIndicator;
3+
import org.reactivecommons.async.rabbit.health.DomainRabbitReactiveHealthIndicator;
44
import org.springframework.boot.actuate.health.AbstractReactiveHealthIndicator;
55
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
66
import org.springframework.context.annotation.Bean;
@@ -13,7 +13,7 @@
1313
public class RabbitHealthConfig {
1414

1515
@Bean
16-
public RabbitReactiveHealthIndicator rabbitHealthIndicator(ConnectionManager manager) {
17-
return new RabbitReactiveHealthIndicator(manager.getProvider(DEFAULT_DOMAIN)); // TODO: Check every domain connection
16+
public DomainRabbitReactiveHealthIndicator rabbitHealthIndicator(ConnectionManager manager) {
17+
return new DomainRabbitReactiveHealthIndicator(manager);
1818
}
1919
}

async/async-rabbit-starter-eda/src/main/java/org/reactivecommons/async/rabbit/config/RabbitMqConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public ConnectionManager buildConnectionManager(@Value("${spring.application.nam
6868
ConnectionFactoryProvider provider = createConnectionFactoryProvider(properties);
6969
ReactiveMessageSender sender = createMessageSender(appName, provider, properties, converter);
7070
ReactiveMessageListener listener = createMessageListener(appName, provider, props);
71-
connectionManager.addDomain(domain, listener, sender);
71+
connectionManager.addDomain(domain, listener, sender, provider);
7272
});
7373
return connectionManager;
7474
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package org.reactivecommons.async.rabbit.health;
2+
3+
import com.rabbitmq.client.Connection;
4+
import com.rabbitmq.client.ConnectionFactory;
5+
import lombok.RequiredArgsConstructor;
6+
import lombok.SneakyThrows;
7+
import org.reactivecommons.async.rabbit.config.ConnectionFactoryProvider;
8+
import org.reactivecommons.async.rabbit.config.ConnectionManager;
9+
import org.springframework.boot.actuate.health.AbstractReactiveHealthIndicator;
10+
import org.springframework.boot.actuate.health.Health;
11+
import reactor.core.publisher.Mono;
12+
13+
import java.util.stream.Collectors;
14+
15+
@RequiredArgsConstructor
16+
public class DomainRabbitReactiveHealthIndicator extends AbstractReactiveHealthIndicator {
17+
private static final String VERSION = "version";
18+
private final ConnectionManager manager;
19+
20+
@Override
21+
protected Mono<Health> doHealthCheck(Health.Builder builder) {
22+
return Mono.zip(manager.getProviders()
23+
.entrySet()
24+
.stream()
25+
.map(entry -> checkSingle(entry.getKey(), entry.getValue().getProvider()))
26+
.collect(Collectors.toList()), this::merge);
27+
}
28+
29+
private Health merge(Object[] results) {
30+
Health.Builder builder = Health.up();
31+
for (Object obj : results) {
32+
Status status = (Status) obj;
33+
builder.withDetail(status.getDomain(), status.getVersion());
34+
}
35+
return builder.build();
36+
}
37+
38+
private Mono<Status> checkSingle(String domain, ConnectionFactoryProvider provider) {
39+
return Mono.defer(() -> getVersion(provider))
40+
.map(version -> Status.builder().version(version).domain(domain).build());
41+
}
42+
43+
private Mono<String> getVersion(ConnectionFactoryProvider provider) {
44+
return Mono.just(provider)
45+
.map(ConnectionFactoryProvider::getConnectionFactory)
46+
.map(this::getRawVersion);
47+
}
48+
49+
@SneakyThrows
50+
private String getRawVersion(ConnectionFactory factory) {
51+
try (Connection connection = factory.newConnection()) {
52+
return connection.getServerProperties().get(VERSION).toString();
53+
}
54+
}
55+
}

async/async-rabbit-starter-eda/src/main/java/org/reactivecommons/async/rabbit/health/RabbitReactiveHealthIndicator.java

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.reactivecommons.async.rabbit.health;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
6+
@Getter
7+
@Builder
8+
public class Status {
9+
private final String version;
10+
private final String domain;
11+
}

async/async-rabbit-starter-eda/src/test/java/org/reactivecommons/async/rabbit/config/CommandListenersConfigTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public void init() throws NoSuchFieldException, IllegalAccessException {
5454
when(receiver.consumeManualAck(any(String.class), any(ConsumeOptions.class))).thenReturn(Flux.never());
5555
when(listener.getReceiver()).thenReturn(receiver);
5656
when(listener.getMaxConcurrency()).thenReturn(20);
57-
manager.addDomain(DEFAULT_DOMAIN, listener, null);
57+
manager.addDomain(DEFAULT_DOMAIN, listener, null, null);
5858
handlers.add(DEFAULT_DOMAIN, handlerResolver);
5959
}
6060

async/async-rabbit-starter-eda/src/test/java/org/reactivecommons/async/rabbit/config/EventListenersConfigTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public void init() {
5555
when(listener.getReceiver()).thenReturn(receiver);
5656
when(listener.getMaxConcurrency()).thenReturn(20);
5757
connectionManager = new ConnectionManager();
58-
connectionManager.addDomain(HandlerRegistry.DEFAULT_DOMAIN, listener, sender);
58+
connectionManager.addDomain(HandlerRegistry.DEFAULT_DOMAIN, listener, sender, null);
5959
handlers.add(HandlerRegistry.DEFAULT_DOMAIN, handlerResolver);
6060
}
6161

0 commit comments

Comments
 (0)