Simple distributed event dispatcher with persistent hospital for failed events execution based on Spring AMQP
TODO
<dependencies>
<dependency>
<groupId>pl.jakubtrzcinski</groupId>
<artifactId>priap</artifactId>
<version>1.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>pl.jakubtrzcinski</groupId>
<artifactId>priap-api</artifactId>
<version>1.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-amqp</artifactId>
<version>2.3.2</version>
</dependency>
</dependencies>
dependencies {
compile 'pl.jakubtrzcinski:priap:1.0.1.RELEASE'
compile 'org.springframework.amqp:spring-amqp:2.3.2'
}
@EnablePriap
@SpringBootApplication
class ExampleApplication {
//[...]
}
var priapSession = PriapSession.createForAmqp(
"application",
10, // Define how much listener threads should be created
rabbitTemplate,
rabbitTemplate,
listeners // List<EventListener>
);
priapSession.run();
return priapSession;
priap.threads=10 #Define how much listener threads should be created
spring.rabbitmq.username=rabbit
spring.rabbitmq.password=rabbit
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5671
NOTE: All events has to be Serializable
!
@Getter
@RequiredArgsConstructor
class ExampleEvent implements Serializable {
private final String text;
}
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import pl.jakubtrzcinski.priap.api.EventListener;
@Slf4j
@Component
public class ExampleEventListener implements EventListener<ExampleEvent> {
@Override
public void process(ExampleEvent event) {
log.error(event.getText());
}
}
import lombok.RequiredArgsConstructor;
import pl.jakubtrzcinski.priap.api.EventDispatcher;
@RequiredArgsConstructor
class FooService {
private final EventDispatcher eventDispatcher;
public void foo() {
eventDispatcher.dispatch(new ExampleEvent("Hello World"));
}
}
NOTE: All events from hospital are reruned after Piriap Session is created
import lombok.RequiredArgsConstructor;
import pl.jakubtrzcinski.priap.PriapSession;
@RequiredArgsConstructor
class FooService {
private final PriapSession session;
public void foo() {
session.rerunFromHospital();
}
}