Eine Internet-Verbindung muss vorhanden sein, damit die eigenen Microservices über die IP-Adresse des Rechners aufgerufen werden können. Ansonsten würden die Rechnernamen verwendet werden, wozu ein DNS-Server benötigt wird.
Bereits vorhandene Tests in JUnit 5 muss dem Projekt entfernt werden!!!
Die IP-Adresse wird über das Kommando ipconfig
ermittelt und liefert z.B.
folgende Ausgabe:
C:\>ipconfig
Windows-IP-Konfiguration
Ethernet-Adapter Ethernet:
...
IPv4-Adresse . . . . . . . . . . : 193.196.84.110
...
Die IP-Adresse muss dann in C:\Windows\System32\drivers\etc\hosts
am
Dateiende eingetragen und abgespeichert werden. Dazu muss man
Administrator-Berechtigung haben.
193.196.84.110 localhost
Die Proxy-Einstellung in gradle.properties muss richtig gesetzt sein. Dabei muss die eigene IP-Adresse bei den Ausnahmen ("nonProxyHosts") eingetragen sein, wozu man typischerweise Wildcards benutzt.
- MongoDB
- Mailserver
- Service Registry
- Config-Server
- API-Gateway
- Circuit Breaker Dashboard (optional)
- kunde
- bestellung
Die Server (außer MongoDB) sind jeweils in einem eigenen Gradle-Projekt.
Durch Aufruf der .bat-Datei:
mongodb
bzw.
mongodb stop
Das Teilfenster Mongo Explorer aktivieren und einen Doppelklick auf den
Eintrag localhost
machen. Jetzt sieht man die Datenbank hska
und kann
zu den Collections dieser Datenbank navigieren.
Eine Collection kann man wiederum durch einen Doppelklick inspizieren und kann dabei die Ansicht zwischen Tree und Table variieren.
Siehe ReadMe.md
im Beispiel config-server
.
In einer Eingabeaufforderung wird der Server mit der Möglichkeit für einen Restart gestartet, falls es geänderte Dateien gibt:
kunde
In einer zweiten Eingabeaufforderung überwachen, ob es Änderungen gibt, so dass
die Dateien für den Server neu bereitgestellt werden müssen; dazu gehören die
übersetzten .class-Dateien und auch Konfigurationsdateien. Damit nicht bei jeder
Änderung der Server neu gestartet wird und man ständig warten muss, gibt es eine
"Trigger-Datei". Wenn die Datei restart.txt
im Verzeichnis
src\main\resources
geändert wird, dann wird ein Neustart des Servers
ausgelöst und nur dann.
Die Eingabeaufforderung, um kontinuierlich geänderte Dateien für den Server bereitzustellen, kann auch innerhalb der IDE geöffnet werden (z.B. als Terminal bei IntelliJ).
gradlew classes -t --build-cache
Mit der URI https://localhost:8444/admin/env
kann überprüft werden, ob der
Microservice kunde die Properties vom Config-Server korrekt ausliest. Der
Response wird mit dem MIME-Type application/vnd.spring-boot.actuator.v1+json
zurückgegeben, welcher von einem Webbrowser i.a. nicht verstanden wird.
Man kann z.B. den REST Client von IntelliJ IDEA benutzen, der über
Tools > Test RESTful Web Service
aktiviert werden kann:
- HTTP method:
GET
- Host/port:
https://localhost:8444
- Path:
/admin/env
Die Ausgabe kann mit den beiden Icons View as JSON und Reformat response
gut lesbar dargestellt werden. Die vom Config-Server bereitgestellten Properties
sind bei
"configService:file:///C:/Users/.../IdeaProjects/config-server/git-repo/kunde-dev.properties"
zu finden.
Analog können bei Microservice bestellung
die Properties überprüft werden:
- Der Port ist von
8444
auf8445
zu ändern. - Bei
"configService:file:///C:/Users/...
stehtbestellung-dev.properties
http://localhost:8761/eureka/apps/kunde
kunde stop
gradlew test --build-cache
gradlew check --build-cache
Die Tests können durch die Option -x junitPlatformTest
ausgelassen ("eXclude")
werden.
gradlew sonarqube --build-cache
Dazu muss der Sonar-Server gestartet sein. Die Tests können durch die Option
-x junitPlatformTest
ausgelassen ("eXclude") werden.
https://localhost:8444/000000000000000000000001
Dabei muss man BASIC-Authentifizierung mit z.B. Username admin
und Passwort
p
verwenden.
Um unnötigen Datentransfer zu vermeiden, kann der Header If-None-Match
mit einer
Versionsnummer (z.B. 0
) als Wert verwendet werden. Falls die angeforderte Ressource
genau diese Versionsnummer hat, wird der Statuscode Not Modified
bzw. 304
zurückgeliefert
Wenn das API-Gateway gestartet ist, kann der Microservice kunde auch darüber
aufgerufen werden, d.h. mit https://localhost:8443/kunde
.
Mit nachfolgender URI kann man einen GET-Request absetzen, wobei Eureka und OpenFeign genutzt wird:
https://localhost:8445/100000000000000000000001
Mit nachfolgender URI kann man einen GET-Request absetzen, wobei Eureka, OpenFeign und Hystrix genutzt wird:
https://localhost:8445/bestellung/100000000000000000000010
https://localhost:8444
{
"nachname": "Test",
"email": "[email protected]",
"newsletter": true,
"geburtsdatum": [
1918,
1,
31
],
"waehrung": "EUR",
"homepage": "https://www.test.de",
"geschlecht": "W",
"familienstand": "L",
"interessen": [
"R",
"L"
],
"adresse": {
"plz": "12345",
"ort": "Testort"
},
"account": {
"username": "test",
"password": "p"
}
}
Im REST Client bei Request und Headers durch + den Eintrag Content-Type
mit
dem Wert application/json
setzen.
https://localhost:8444/000000000000000000000001
[
{ "op": "replace", "path": "/nachname", "value": "Neuername" },
{ "op": "replace", "path": "/email", "value": "[email protected]" },
{ "op": "add", "path": "/interessen", "value": "R" },
{ "op": "remove", "path": "/interessen", "value": "L" }
]
Dazu muss der Header If-Match
mit der Versionsnummer des Kunden (z.B. 0
)
als Wert gesetzt werden.
Im Headers bei Content-Type
den MIME-Type application/json-patch+json
setzen.
gradlew restclient
aufrufen
https://localhost:8444/000000000000000000000001
Beim Karteireiter Body
den Eintrag Multipart Body
auswählen. Danach beim
Label Add Part:
auf den Button File
klicken und folgende Einstellungen
vornehmen:
- Name:
file
- File: anklicken und die hochzuladende Datei auswählen, z.B. in
src\test\resources\rest
gibt es PNG-, JPG- und MP4-Dateien. Dabei erkennt RESTclient, welchen MIME-Type die ausgewählte Datei hat und schlägt den entsprechenden Eintrag für Content type vor.
Danach auf Add & Close
klicken und den PUT-Request schließlich abschicken. Der
Statuscode muss dann 200 OK
sein.
Nun kann man mit MongoChef in der Datenbank hska
in der Collection
fs.files
die hochgeladene Datei mit dem Default-Viewer inspizieren.
Außerdem kann man in einem Webbrowser die hochgeladene Datei über
die URL https://localhost:8444/000000000000000000000001/media
herunterladen.
http://localhost:8761
http://localhost:8762
Im Dashboard die URI für den zu beobachtenden Microservice eingeben, z.B.:
http://admin:p@localhost:8081/admin/hystrix.stream
Hier wird BASIC-Authentifizierung mit dem Benutzernamen 'admin' und mit dem Passwort 'p' verwendet.
- Erst nach dem ersten Request des zu beobachtenden Microservice ist eine Anzeige zu sehen.
- Mit dem Microservice wird über HTTP, und nicht über HTTPS kommuniziert, weil man sonst für Hystrix noch einen Truststore konfigurieren müsste. Das würde den Umfang der Übungen sprengen und gehört in Vorlesungen mit den Schwerpunkten "IT-Sicherheit" und "Automatisierung von Geschäftsprozessen".
https://localhost:8444/swagger-ui.html
D.h. welche Zuordnung gibt es zwischen URIs bzw. Pfaden, HTTP-Methoden und Java-Methoden?
https://localhost:8444/admin/mappings
https://localhost:8444/admin/beans
In einer Eingabeaufforderung:
jconsole
Navigation, z.B.:
kunde.jar > MBeans > org.springframework.boot > Endpoint > beansEndpoint > Operations > getData()
Analog mit requestMappingsEndpoint
statt beansEndpoint
.
java -Xbootclasspath/p:alpn-boot.jar -jar build/libs/kunde.jar --spring.profiles.active=dev