Skip to content

Commit e00fe8b

Browse files
author
Daniel Bustamante Ospina
committed
Sincronize with master
1 parent b171795 commit e00fe8b

File tree

10 files changed

+155
-74
lines changed

10 files changed

+155
-74
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -642,4 +642,6 @@ MigrationBackup/
642642
.ionide/
643643

644644
# End of https://www.toptal.com/developers/gitignore/api/macos,linux,windows,gradle,java,intellij,visualstudio,eclipse
645-
contiperf-report
645+
contiperf-report
646+
647+
samples/async/local-example/

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## [1.0.0-beta8](https://github.com/reactive-commons/reactive-commons-java/tree/1.0.0-beta8) (2021-04-26)
4+
5+
**Merged pull requests:**
6+
7+
- Common classes separation from RabbitMQ Implementation [\#56](https://github.com/reactive-commons/reactive-commons-java/pull/56)
8+
39
## [1.0.0-beta7.1](https://github.com/reactive-commons/reactive-commons-java/tree/1.0.0-beta7.1) (2021-04-21)
410

511
## [1.0.0-beta7](https://github.com/reactive-commons/reactive-commons-java/tree/1.0.0-beta7) (2021-04-21)

docs/index.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<h1>Reactive Commons Reference Guide</h1>
1616
<div class="details">
1717
<span id="author" class="author">Daniel Bustamante Ospina</span><br>
18-
<span id="revnumber">version 1.0.0-beta7</span>
18+
<span id="revnumber">version 1.0.0-beta8</span>
1919
</div>
2020
<div id="toc" class="toc2">
2121
<div id="toctitle">Table of Contents</div>
@@ -869,11 +869,11 @@ <h5 id="_handlerregistry_servequery">HandlerRegistry - serveQuery</h5>
869869
</div>
870870
<div id="footer">
871871
<div id="footer-text">
872-
Version 1.0.0-beta7<br>
873-
Last updated 2021-04-21 02:23:15 UTC
872+
Version 1.0.0-beta8<br>
873+
Last updated 2021-04-26 19:37:54 UTC
874874
</div>
875875
</div>
876876
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.min.css">
877877
<script src="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/run_prettify.min.js"></script>
878878
</body>
879-
</html>
879+
</html>

samples/async/receiver-responder/async-receiver-sample.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ apply plugin: 'org.springframework.boot'
22

33
dependencies {
44
compile project(":async-commons-rabbit-starter")
5+
// compile 'org.reactivecommons:async-commons-starter:1.0.0-beta7'
56
compile('org.springframework.boot:spring-boot-starter')
67
runtime('org.springframework.boot:spring-boot-devtools')
78
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package sample;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import lombok.NoArgsConstructor;
6+
7+
@Data
8+
@NoArgsConstructor
9+
@AllArgsConstructor
10+
public class AddMemberCommand {
11+
private String name;
12+
private String projectId;
13+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package sample;
2+
import org.reactivecommons.async.api.handlers.QueryHandler;
3+
import org.springframework.stereotype.Component;
4+
import reactor.core.publisher.Mono;
5+
6+
import java.time.Duration;
7+
8+
@Component
9+
public class EmptyReceiver implements QueryHandler<String, String> {
10+
@Override
11+
public Mono<String> handle(String message) {
12+
return Mono.delay(Duration.ofSeconds(2)).log("EmptyReceiver").then(Mono.empty());
13+
}
14+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package sample;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.reactivecommons.api.domain.DomainEvent;
5+
import org.reactivecommons.api.domain.DomainEventBus;
6+
import org.reactivecommons.async.api.handlers.QueryHandler;
7+
import org.springframework.stereotype.Component;
8+
import reactor.core.publisher.Mono;
9+
10+
import java.time.Duration;
11+
import java.util.Random;
12+
import java.util.UUID;
13+
14+
@Component
15+
@RequiredArgsConstructor
16+
public class MemberReceiver implements QueryHandler<MemberRegisteredEvent, AddMemberCommand> {
17+
18+
private final DomainEventBus eventBus;
19+
20+
@Override
21+
public Mono<MemberRegisteredEvent> handle(AddMemberCommand command) {
22+
if(new Random().nextInt()%2 == 0){
23+
System.out.println("Causando error!!");
24+
throw new RuntimeException("Error Causado");
25+
}
26+
return Mono.from(eventBus.emit(new DomainEvent<>("persona.registrada", "342", new MemberRegisteredEvent(UUID.randomUUID().toString(), new Random().nextInt()%100))))
27+
.then(Mono.fromSupplier(() -> new MemberRegisteredEvent(UUID.randomUUID().toString(), new Random().nextInt()%100))
28+
.delayElement(Duration.ofMillis(400)));
29+
}
30+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package sample;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import lombok.NoArgsConstructor;
6+
7+
@Data
8+
@AllArgsConstructor
9+
@NoArgsConstructor
10+
public class MemberRegisteredEvent {
11+
private String memberId;
12+
private Integer initialScore;
13+
}
Lines changed: 70 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,23 @@
11
package sample;
22

3-
import com.rabbitmq.client.ConnectionFactory;
4-
import lombok.Builder;
3+
import lombok.AllArgsConstructor;
54
import lombok.Data;
5+
import lombok.RequiredArgsConstructor;
66
import lombok.extern.java.Log;
7-
import org.reactivecommons.async.api.AsyncQuery;
7+
import org.reactivecommons.api.domain.DomainEvent;
8+
import org.reactivecommons.api.domain.DomainEventBus;
89
import org.reactivecommons.async.api.DirectAsyncGateway;
910
import org.reactivecommons.async.api.HandlerRegistry;
11+
import org.reactivecommons.async.api.handlers.QueryHandler;
1012
import org.reactivecommons.async.impl.config.annotations.EnableDirectAsyncGateway;
1113
import org.reactivecommons.async.impl.config.annotations.EnableDomainEventBus;
1214
import org.reactivecommons.async.impl.config.annotations.EnableMessageListeners;
13-
import org.reactivecommons.async.rabbit.config.ConnectionFactoryProvider;
14-
import org.springframework.boot.CommandLineRunner;
1515
import org.springframework.boot.SpringApplication;
1616
import org.springframework.boot.autoconfigure.SpringBootApplication;
17-
import org.springframework.boot.context.properties.PropertyMapper;
1817
import org.springframework.context.annotation.Bean;
19-
import org.springframework.context.annotation.Primary;
20-
import reactor.core.publisher.Flux;
2118
import reactor.core.publisher.Mono;
2219

23-
import java.security.KeyManagementException;
24-
import java.security.NoSuchAlgorithmException;
25-
import java.time.Duration;
26-
import java.util.Map;
27-
import java.util.logging.Level;
28-
29-
import static reactor.core.publisher.Mono.delay;
20+
import static org.reactivecommons.async.api.HandlerRegistry.register;
3021
import static reactor.core.publisher.Mono.just;
3122

3223
@SpringBootApplication
@@ -39,70 +30,81 @@ public static void main(String[] args) {
3930
SpringApplication.run(SampleReceiverApp.class, args);
4031
}
4132

42-
private ConnectionRabbitProperties rabbitProperties(){
43-
return ConnectionRabbitProperties.builder()
44-
.hostname("b-8b1e2880-30bd-4124-b765-220854289b87.mq.us-east-1.amazonaws.com")
45-
.username("user")
46-
.password("userrszthwco")
47-
.port(5671)
48-
.virtualhost("/")
49-
.ssl(true)
50-
.build();
33+
//@Bean
34+
public HandlerRegistry handlerRegistry(MemberReceiver receiver) {
35+
return register()
36+
.serveQuery("serveQuery.register.member", receiver)
37+
.serveQuery("serveQuery.register.member.new", new QueryHandler<MemberRegisteredEvent,
38+
AddMemberCommand>() {
39+
@Override
40+
public Mono<MemberRegisteredEvent> handle(AddMemberCommand command) {
41+
return just(new MemberRegisteredEvent("42", 69));
42+
}
43+
})
44+
.serveQuery("test.query", message -> {
45+
return Mono.error(new RuntimeException("Falla Generada Query"));
46+
}, AddMemberCommand.class);
5147
}
5248

53-
private void configureSsl(ConnectionFactory connectionFactory) {
54-
try {
55-
connectionFactory.useSslProtocol();
56-
} catch (NoSuchAlgorithmException | KeyManagementException exception) {
57-
log.log(Level.SEVERE, exception.getMessage(), exception);
58-
}
49+
@Bean
50+
public HandlerRegistry handlerRegistrySubs(DirectAsyncGateway gateway) {
51+
return HandlerRegistry.register()
52+
.serveQuery("query1", message -> {
53+
log.info("resolving from direct query");
54+
return just(new RespQuery1("Ok", message));
55+
}, Call.class)
56+
.serveQuery("query2", (from, message) -> {
57+
log.info("resolving from delegate query");
58+
return gateway.reply(new RespQuery1("Ok", message), from).then();
59+
}, Call.class);
5960
}
6061

61-
@Bean
62-
public CommandLineRunner runner(DirectAsyncGateway gateway) {
63-
return args -> {
64-
Flux.interval(Duration.ofSeconds(3)).flatMap(l -> {
65-
AsyncQuery<Map> query = new AsyncQuery<>("query", Map.of("type", "query"));
66-
return gateway.requestReply(query, "", Map.class);
67-
});
62+
//@Bean
63+
public HandlerRegistry handlerRegistryForEmpty(EmptyReceiver emptyReceiver) {
64+
return register()
65+
.serveQuery("serveQuery.empty", emptyReceiver);
66+
}
6867

69-
};
68+
//@Bean
69+
public HandlerRegistry eventListeners(SampleUseCase useCase) {
70+
return register()
71+
.listenEvent("persona.registrada", useCase::reactToPersonaEvent, MemberRegisteredEvent.class);
7072
}
7173

7274
@Bean
73-
public HandlerRegistry registry() {
74-
return HandlerRegistry.register()
75-
.serveQuery("query", message -> delay(Duration.ofMillis(500)).thenReturn(message), Map.class)
76-
.handleCommand("command", message -> just(message).log().then(), Map.class)
77-
.listenEvent("event", message -> just(message).log().then(), Map.class)
78-
.listenNotificationEvent("event1", message -> just(message).log().then(), Map.class)
79-
;
75+
public SampleUseCase sampleUseCase(DomainEventBus eventBus) {
76+
return new SampleUseCase(eventBus);
8077
}
8178

82-
@Bean
83-
@Primary
84-
public ConnectionFactoryProvider connection(){
85-
ConnectionRabbitProperties properties = rabbitProperties();
86-
final ConnectionFactory factory = new ConnectionFactory();
87-
PropertyMapper map = PropertyMapper.get();
88-
map.from(properties::getHostname).whenNonNull().to(factory::setHost);
89-
map.from(properties::getPort).to(factory::setPort);
90-
map.from(properties::getUsername).whenNonNull().to(factory::setUsername);
91-
map.from(properties::getPassword).whenNonNull().to(factory::setPassword);
92-
map.from(properties::getVirtualhost).whenNonNull().to(factory::setVirtualHost);
93-
map.from(properties::isSsl).whenTrue().as(ssl -> factory).to(this::configureSsl);
94-
System.out.println("RabbitMQ configured!!");
95-
return () -> factory;
79+
@Data
80+
@AllArgsConstructor
81+
static class RespQuery1 {
82+
private String response;
83+
private Call request;
9684
}
9785

9886
@Data
99-
@Builder
100-
static class ConnectionRabbitProperties {
101-
private String virtualhost;
102-
private String hostname;
103-
private String username;
104-
private String password;
105-
private Integer port;
106-
private boolean ssl;
87+
@AllArgsConstructor
88+
static class Call {
89+
private String name;
90+
private String phone;
10791
}
108-
}
92+
93+
@Data
94+
@AllArgsConstructor
95+
static class CallResponse {
96+
private String message;
97+
private Integer code;
98+
}
99+
100+
@RequiredArgsConstructor
101+
public static class SampleUseCase {
102+
private final DomainEventBus eventBus;
103+
104+
Mono<Void> reactToPersonaEvent(DomainEvent<MemberRegisteredEvent> event) {
105+
return Mono.from(eventBus.emit(new DomainEvent<>("persona.procesada", "213", event.getData())))
106+
.doOnSuccess(_v -> System.out.println("Persona procesada"));
107+
}
108+
}
109+
110+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
spring.application.name=receiverW
2-
#spring.rabbitmq.virtual-host=test
2+
spring.rabbitmq.virtual-host=test

0 commit comments

Comments
 (0)