Eventhandling mit Spring REST API

A

Avalon

Mitglied
Hallo, ich habe eine REST API mit Spring Boot gebaut. 3 Schichten. Präsentation, Service und Datenhaltung (Controller, Geschäftslogik, Repository), Swagger, actuatur, Prometheus usw. Aber ich bin zu blöd für Eventhandling. Wenn z.B ein Get-Request reinkommt, soll ein Zähler hochgezählt werden. Das klappt mit einem Metrics Counter gut. Aber ich möchte das per Eventhandling hinbekommen. Also wenn ein Request (Get, Post, Put, egal) reinkommt, soll ein Zähler hochgezählt werden (oder was auch immer). Die bauen in den Tutorials immer eine Eventklasse um die Daten vorzuhalten. Das z.B. kapier ich nicht. Muss das sein? Wo bau ich den Publisher ein? Wo den Listener? Keine Ahnung? Ich bekomme den Code der Tutorials nicht auf meinen umgemünzt. Ich hab da ein totales Verständnisproblem. Kann jemand helfen?
 
Zuletzt bearbeitet:
sascha-sphw

sascha-sphw

Bekanntes Mitglied
Da Du von Publisher redest, gehe ich davon aus, dass das Publish- Subscriber Pattern gemeint ist. In diesem Fall ist der Publisher dann derjenige, der weiß was Du publishen möchtest, also wäre das in Deinem Fall vermutlich der Controller, da der Service nichts von GET, POST usw. weiß.
Java:
@RestController
public class FooController {
    
    private final EventBus eventBus;
    
    @Autowire
    public FooController(final EventBus eventBus) {
        this.eventBus = eventBus;
    }
    
    @GetMapping("/path")
    public ResponseEntity<Object> getSomething() {
        ...
            
        eventBus.post(new FooGetSomethingEvent());
        
        ...
    }
}

Und wo auch immer Du das dann bearbeiten möchtest.
Java:
public class EventListener {
 
    @Subscribe
    public void fooGetSomethingEvent(FooGetSomethingEvent event) {
        // do something with it.
    }
}
Java:
EventListener listener = new EventListener();
eventBus.register(listener);

 
A

Avalon

Mitglied
Hallo, danke erstmal. @Subcribe ist mir neu. Schau ich mir mal an. Bis jetzt war ich bei @RepositoryEventHandler, @TransactionalEventListener, @EventListener, extends ApplicationEvent... u.s.w. EventBus hatte ich auch als letztes am Wickel. Ich seh da nicht mehr durch. Mir raucht die Birne. :-D
 
sascha-sphw

sascha-sphw

Bekanntes Mitglied
Möglichkeiten gibt es viele. Spring Events geht natürlich auch. Weißt Du denn aber jetzt wo hin mit was? Oder hast Du noch wo anders Schwierigkeiten?

Ich dachte das war die Frage.
 
A

Avalon

Mitglied
Ich denke, damit kann ich was anfangen. Ich probiere mal ein bisschen rum und melde mich nochmal.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Vielleicht ne dumme Frage, aber was genau hast du eigentlich vor? Nur einfach irgendwie irgendwo ohne besonderen Grund Events benutzen, oder haben Events da einen besonderen Zweck?
 
A

Avalon

Mitglied
Das ist eine gute Frage. Meine aktuelle Aufgabe ist es, benutzerdefinierte Metriken für Prometheus zu erstellen. Mit den Möglichkeiten von MeterMetrics hab ich das auch hinbekommen (zumindest einen einfachen Counter). Der zählt aktuell jeden Neueintrag in die Datenbank und steht in Prometheus als Metrik zur Verfügung. Aber so richtig benutzerdefiniert ist das ja nicht. Die Metriken sind alle vorgegeben, man muss sie nur implementieren. Ich hab dann als Kopfnuß den Hinweis bekommen, das mit Eventhandlern zu machen. Aber da hab ich auf der Schulbank gepennt. :-D Selbst wenn ich das hinbekomme, hab ich keine Ahnung, wie ich eine eigene Methode zu einer von Prometheus verständlichen Metrik ummodeln kann. Also der Gedanke war jetzt, wenn z.B. ein GET-Request reinkommt, wird ein Event ausgelöst, welches dann eine Methode mit einer Funktion (z.B. Zähler) aufruft und den Wert als Metrik für Prometheus zurückgibt. Ich denke, daß mit dem Eventbus geht in die richtige Richtung. Da Der, letztendlich meinen mit andere Microservices "synchronisieren" wird. Ich weiß jetzt nicht, wie ich es besser beschreiben soll.
 
sascha-sphw

sascha-sphw

Bekanntes Mitglied
Da Der, letztendlich meinen mit andere Microservices "synchronisieren" wird. Ich weiß jetzt nicht, wie ich es besser beschreiben soll.
Der Kontext des EventBus (Guava wie auch Spring Events) geht, ohne eigenes anpassen, nicht über den Applikations-Kontext hinaus.

Services untereinander würde ich dann eher über einen Message Broker verbinden.
 
sascha-sphw

sascha-sphw

Bekanntes Mitglied
Ich bin es nur überflogen, aber es gibt ja viele Möglichkeiten wie man sowas machen kann. In dem Video klingt es für mich danach, das er die REST Schnittstelle zur Kommunikation der Services nimmt.

Du musst bei sowas immer Deinen Use-Case mit den Vor- und Nachteilen einzelner Möglichkeiten anschauen und dann die auswählen, die den Use-Case mit den geringsten Nachteilen erfüllt.

Aber wir kommen ein bisschen von einem ins andere, ein spezielles Problem kann ich irgendwie nicht mehr erkennen.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Eigene Metriken mit Prometheus und Eventbus mit Mikroservices und synchronisieren zwischen denen sind allerdings völlig verschiedene und unabhängige Dinge?


Wenn ich das zumindest halbwegs richtig verstanden habe, sollst du irgendeinem Projekt Metrik hinzufügen?
Und die sollen "Benutzerdefiniert" sein, wer ist denn da der Nutzer und wie soll der diese definieren?
 
A

Avalon

Mitglied
Es ist mit peinlich, aber vor 4 Monaten hab ich mein erstes Hello World geschrieben. In den letzten vier Wochen dann das volle Programm Backendentwicklung im Praktikumsbetrieb. Nix mit Üben und Grundlagen wiederholen. Gleich Spring, Spring-Boot, RESTful Service, Swagger, Prometheus, Actuator, Webclient, Paginerung, Maven, Gradle usw. Vor einem Monat noch nie was davon gehört, hab das aber alles lösen können. Deswegen bitte ich um Nachsicht, wenn ich , trotz Bemühung, nicht ganz mitkomme. Ich hab hier mal ein Beispiel von Baeldung in Eclipse übernommen, um zu sehen was passiert. Es passiert natürlich nichts. Wie erwartet. Das Programm startet und schluß. Aber was muss passieren? Das ist die Frage? Klar, irgendwas muss das Event auslösen. Aber was? Ich steh da total auf dem Schlauch. Ich hab alles andere jetzt erstmal beiseite geschoben. Bevor ich diese Eventgeschichte nicht kappiert habe, brauch ich nicht weitermachen. Ich hoffe ihr helft mir dabei. Auch wenn es nach den Worten einiger Anderer, trivial sein soll.

Java:
import org.springframework.context.ApplicationEvent;

public class CustomSpringEvent extends ApplicationEvent {
    private static final long serialVersionUID = 1L;
    private String message;
 
    public CustomSpringEvent(Object source, String message) {
        super(source);
        this.message = message;
    }
    public String getMessage() {
        return message;
    }
}

Java:
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class CustomSpringEventListener implements ApplicationListener<CustomSpringEvent> {
    @Override
    public void onApplicationEvent(CustomSpringEvent event) {
        System.out.println("Received spring custom event - " + event.getMessage());
    }
}

Java:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;

@Component
public class CustomSpringEventPublisher {
    @Autowired
    private ApplicationEventPublisher applicationEventPublisher;

    public void publishCustomEvent(final String message) {
        System.out.println("Publishing custom event. ");
        CustomSpringEvent customSpringEvent = new CustomSpringEvent(this, message);
        applicationEventPublisher.publishEvent(customSpringEvent);
    }
}

Java:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class EventApplication {

    public static void main(String[] args) {
        SpringApplication.run(EventApplication.class, args);
    }

}
 
sascha-sphw

sascha-sphw

Bekanntes Mitglied
Java:
@RestController
public class FooController {
    
    private final CustomSpringEventPublisher customSpringEventPublisher;
    
    @Autowire
    public FooController(final CustomSpringEventPublisher customSpringEventPublisher) {
        this.customSpringEventPublisher= customSpringEventPublisher;
    }
    
    @GetMapping("/path")
    public ResponseEntity<Object> getSomething() {
        ...
            
        customSpringEventPublisher.publishCustomEvent("Hello Event!");
        
        ...
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Spring Boot startet nicht Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring: Testen von unterschiedlichen application.properties Werten Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Spring Boot -> War File | 404 in Tomcat Frameworks - Spring, Play, Blade, Vaadin & Co 20
L Spring Boot Anwendung "automatisch" neustarten Frameworks - Spring, Play, Blade, Vaadin & Co 3
A Spring boot Frameworks - Spring, Play, Blade, Vaadin & Co 18
T Unit Test mit Spring Boot - Service Autowired Frameworks - Spring, Play, Blade, Vaadin & Co 0
iman Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 13
S Spring Security deaktivieren Frameworks - Spring, Play, Blade, Vaadin & Co 10
NicoDeluxe DTO <> Entity Hibernate Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 28
W Projekt Bootstrap/Kotlin/Spring Framework Frameworks - Spring, Play, Blade, Vaadin & Co 0
W Kotlin / Spring Framework Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring MongoDB: Attribut in der Superklasse und @Indexed erst in der Subklasse Frameworks - Spring, Play, Blade, Vaadin & Co 5
NicoDeluxe Verständnisfrage DTO Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 19
NicoDeluxe Spring Boot Load Balancing Frameworks - Spring, Play, Blade, Vaadin & Co 5
S Spring: MongoDB Assoziation Frameworks - Spring, Play, Blade, Vaadin & Co 1
S Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 1
NicoDeluxe Spring Boot Threads Frameworks - Spring, Play, Blade, Vaadin & Co 6
F Server-Java-Spring Websockets Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Spring Boot: Wert aus Config Datei ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot: Ein geschütztes Verzeichnis Frameworks - Spring, Play, Blade, Vaadin & Co 1
T Probleme mit Spring Boot Docker und Bootstrap Frameworks - Spring, Play, Blade, Vaadin & Co 9
NicoDeluxe Spring Boot Eureka/Zuul Frameworks - Spring, Play, Blade, Vaadin & Co 0
F Redirect in einer Spring Boot WebApplication Frameworks - Spring, Play, Blade, Vaadin & Co 7
F spring apllication startet nicht, ports werden verwednet Frameworks - Spring, Play, Blade, Vaadin & Co 12
B Erstes Spring Boot Projekt: Gameserver-Manager Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring Kurse von Baeldung Frameworks - Spring, Play, Blade, Vaadin & Co 6
Thallius Gibt es einen "Standard" Folder für Spring deployment auf Linux Servern? Frameworks - Spring, Play, Blade, Vaadin & Co 13
L Spring Data Einträge von User zahlen und auflisten Frameworks - Spring, Play, Blade, Vaadin & Co 7
V Spring Boot, thymeleaf, Eingaben cashen oder per session speichern? Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring Boot Security Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot i18n Frameworks - Spring, Play, Blade, Vaadin & Co 28
T Spring Boot : Update H2 Repository Frameworks - Spring, Play, Blade, Vaadin & Co 14
A Spring Boot/ OneToMany Relation Frameworks - Spring, Play, Blade, Vaadin & Co 29
S Spring: Eine Klasse am Anfang instanzieren Frameworks - Spring, Play, Blade, Vaadin & Co 5
S Spring Boot testen mit Service Klassen Frameworks - Spring, Play, Blade, Vaadin & Co 4
iman Controller in Spring 4,0 Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring JPA / Hibernate: save Methode arbeitet nicht Frameworks - Spring, Play, Blade, Vaadin & Co 2
Thallius Spring Backend Funktion mit Langzeit Requester Frameworks - Spring, Play, Blade, Vaadin & Co 2
F spring post null werte Frameworks - Spring, Play, Blade, Vaadin & Co 1
F Spring Webanwendung Datenbank Frameworks - Spring, Play, Blade, Vaadin & Co 47
L Controller Spring Boot mit Java Frameworks - Spring, Play, Blade, Vaadin & Co 20
J Spring Boot H2 Datbase Frameworks - Spring, Play, Blade, Vaadin & Co 2
A Spring Namenconvention Frameworks - Spring, Play, Blade, Vaadin & Co 4
J Spring Boot Thymleaf mit Java.Optional Frameworks - Spring, Play, Blade, Vaadin & Co 0
L JavaFX Anwendung mit Spring Boot und mehrere FXML Forms Frameworks - Spring, Play, Blade, Vaadin & Co 5
P Mit Maven (und Spring-boot) ein FatJAR und ein EAR bauen Frameworks - Spring, Play, Blade, Vaadin & Co 3
NicoDeluxe Spring Boot Basic Authentication langsam Frameworks - Spring, Play, Blade, Vaadin & Co 2
NicoDeluxe Start Stop Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
H spring web Frameworks - Spring, Play, Blade, Vaadin & Co 26
H Spring Boot - Dependency Injection Frameworks - Spring, Play, Blade, Vaadin & Co 26
B Java Spring Boot - POM-Problem Frameworks - Spring, Play, Blade, Vaadin & Co 8
S Spring: Werte speichern über Requests hinwege ohne DB Frameworks - Spring, Play, Blade, Vaadin & Co 24
NicoDeluxe Spring Boot parallele Requests Frameworks - Spring, Play, Blade, Vaadin & Co 1
NicoDeluxe Spring Boot Resttemplate exchange XML Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Spring Data Repository delete bulk Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Root-Pfad zu meiner Spring Boot Application Frameworks - Spring, Play, Blade, Vaadin & Co 3
N MongoDB-Spring "Cannot use a complex object as a key value" Frameworks - Spring, Play, Blade, Vaadin & Co 0
NicoDeluxe Spring Boot Error Logging Frameworks - Spring, Play, Blade, Vaadin & Co 5
NicoDeluxe Spring Boot Transactions Frameworks - Spring, Play, Blade, Vaadin & Co 10
R Spring Data: Hibernate liest nicht alle Ebenen Frameworks - Spring, Play, Blade, Vaadin & Co 5
D Spring Boot auf virtuellen Server oder Cloud? Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Spring Data: Detached Entity passed to persist Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 6
R Nebenjob im Bereich JEE, Spring, Servlets, REST Frameworks - Spring, Play, Blade, Vaadin & Co 3
D AWS Server Spring Boot und Datenbank Frameworks - Spring, Play, Blade, Vaadin & Co 0
S Spring Boot: Eigene Config aufbauen Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Spring MVC redirect Nachricht ohne erweiterung der URL Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring Boot/Html-Content/Web-Server Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring Boot - MVC - Error flushen Frameworks - Spring, Play, Blade, Vaadin & Co 0
K Spring Boot und RestFull Frameworks - Spring, Play, Blade, Vaadin & Co 3
L Spring Data: Multiple representations of the same entity Frameworks - Spring, Play, Blade, Vaadin & Co 14
A Spring ServerQueue Frameworks - Spring, Play, Blade, Vaadin & Co 0
A Spring Server Logging Frameworks - Spring, Play, Blade, Vaadin & Co 5
F Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 14
D Datenbankanbindung mit Spring Frameworks - Spring, Play, Blade, Vaadin & Co 5
P Spring JPA Query zusammensetzen Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring Data data.sql SQL Insert mit single quote Frameworks - Spring, Play, Blade, Vaadin & Co 4
S Spring Data Hibernate mehrfache Suchkriterien Frameworks - Spring, Play, Blade, Vaadin & Co 5
NicoDeluxe Spring Boot Microservices und Entitäten Frameworks - Spring, Play, Blade, Vaadin & Co 5
T Spring Thymeleaf Argumente Frameworks - Spring, Play, Blade, Vaadin & Co 9
J Spring data JPA Query Frameworks - Spring, Play, Blade, Vaadin & Co 2
N Spring Boot javax.mail Frameworks - Spring, Play, Blade, Vaadin & Co 2
B Spring tools security mit JSP Frameworks - Spring, Play, Blade, Vaadin & Co 6
NicoDeluxe Spring Boot: Logfiles wie organisieren? Frameworks - Spring, Play, Blade, Vaadin & Co 0
NicoDeluxe Spring Boot GET Frameworks - Spring, Play, Blade, Vaadin & Co 4
J Spring Boot + Swagger - XML Example Values fehlerhaft Frameworks - Spring, Play, Blade, Vaadin & Co 4
NicoDeluxe Spring Boot statt JavaEE Frameworks - Spring, Play, Blade, Vaadin & Co 65
L Spring JPA Klasse wie definieren? Frameworks - Spring, Play, Blade, Vaadin & Co 0
O OAuth mit Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 3
D Spring Boot Controller kann nicht bei jedem Request erreicht werden Frameworks - Spring, Play, Blade, Vaadin & Co 7
L Spring Boot mit Rest, JPA und Frontend Frameworks - Spring, Play, Blade, Vaadin & Co 15
I Spring Boot wo fängt der Wahnsinn an? Frameworks - Spring, Play, Blade, Vaadin & Co 1
T Spring/JSP auf Spring/JSF umstellen Frameworks - Spring, Play, Blade, Vaadin & Co 0
S Best Practise Automatisierung in Spring Frameworks - Spring, Play, Blade, Vaadin & Co 11
H Spring Boot JPA - Models Verknüpfen (JOIN) Frameworks - Spring, Play, Blade, Vaadin & Co 0
H Spring Boot, Hibernate und OAuth2 wie komme ich an den User? Frameworks - Spring, Play, Blade, Vaadin & Co 13
H OAuth2 mit Spring boot und Java Frameworks - Spring, Play, Blade, Vaadin & Co 5
H Spring Boot Models auslagern Frameworks - Spring, Play, Blade, Vaadin & Co 3
R Spring MVC -> Bean im Front-End ( Tomcat ) und Back-End teilen. Frameworks - Spring, Play, Blade, Vaadin & Co 5
N Spring Boot Rest Relationships Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Spring JPA Entity Definierung Frameworks - Spring, Play, Blade, Vaadin & Co 0

Ähnliche Java Themen

Anzeige

Neue Themen


Oben