user-manager
This project uses Quarkus, the Supersonic Subatomic Java Framework.
If you want to learn more about Quarkus, please visit its website: https://quarkus.io/ .
Configuring the application
This properties must be configured to run the application
Key | Value | Default | Mandatory | Description |
---|---|---|---|---|
quarkus.oidc.auth-server-url | https://keycloakurl/realms/realmname | none | yes | Url of the keycloak server with the realm |
quarkus.mongodb.connection-string | mongodb://ozg-mongodb:27017 | none | yes | The connection string for the mongo db database |
quarkus.mongodb.database | usermanager | usermanager | no | Name of the mongo db database |
ozgcloud.keycloak.sync.period | 5m | 6h | no | Period between synchronizations |
ozgcloud.keycloak.api.user | apiUser | none | yes | The name of the keycloak admin api user |
ozgcloud.keycloak.api.password | **** | none | yes | The password of the keycloak admin api user |
ozgcloud.keycloak.api.realm | realm-name | none | yes | The name of the realm |
ozgcloud.keycloak.api.organisations-einheit-id-key | organisationseinheitId | organisationseinheitId | no | The key where the organisationsEinheitId of the group is saved |
ozgcloud.keycloak.api.ldap-id-key | LDAP_ID | LDAP_ID | no | The key to get the keycloak user id from |
ozgcloud.user-manager.url | http://localhost:8080 | none | yes | The external root url of the usermanager |
keycloak.url | https://sso.service | none | yes | The root url of the keycloak service |
Running the application in dev mode
You can run your application in dev mode that enables live coding using:
./mvnw compile quarkus:dev
NOTE: Quarkus now ships with a Dev UI, which is available in dev mode only at http://localhost:8080/q/dev/.
If you want to use remote Keycloak for local development, then use the profile remotekc. Be aware, that it deactivates synchronization - if you need it, then you have to create your own realm and set it in properties, like this:
keycloak: realm: your-realm ozgcloud: usersync: period: "6h"
Running the server with custom realm
In order to start user-manager-server connecting againts dev keycloak locally with custom realm use below configuration in your IDE or CLI.
-Dquarkus.profile=local,remotekc
-Dquarkus.oidc.auth-server-url=https://keyclaokurl/realms/realmname
-Dozgcloud.keycloak.api.realm=sebo-test
-Dozgcloud.usersync.period="5s"
Packaging and running the application
The application can be packaged using:
./mvnw package
It produces the quarkus-run.jar
file in the target/quarkus-app/
directory.
Be aware that it’s not an über-jar as the dependencies are copied into the target/quarkus-app/lib/
directory.
The application is now runnable using java -jar target/quarkus-app/quarkus-run.jar
.
If you want to build an über-jar, execute the following command:
./mvnw package -Dquarkus.package.type=uber-jar
The application, packaged as an über-jar, is now runnable using java -jar target/*-runner.jar
.
Creating a native executable
You can create a native executable using:
./mvnw package -Pnative
Or, if you don't have GraalVM installed, you can run the native executable build in a container using:
./mvnw package -Pnative -Dquarkus.native.container-build=true
You can then execute your native executable with: ./target/user-manager-1.0.0-SNAPSHOT-runner
If you want to learn more about building native executables, please consult https://quarkus.io/guides/maven-tooling.
Related Guides
- MongoDB with Panache (guide): Simplify your persistence code for MongoDB via the active record or the repository pattern
- SmallRye Health (guide): Monitor service health
Provided Code
RESTEasy Reactive
Easily start your Reactive RESTful Web Services
SmallRye Health
Monitor your application's health using SmallRye Health
Best parctice
User package-private fields for injected fields
This involves injection fields, constructors and initializers, observer methods, producer methods and fields, disposers and interceptor methods.
See section 2 of quarkus guide
Quarkus Speichernutzung
Usermanager Einstellungen
Usermanager als über-jar erstellen und lokal starten:
./mvnw clean package -Dquarkus.package.type=uber-jar
java -Dquarkus.oidc.auth-server-url=https://keycloakurl/realms/realmname \
-Dozgcloud.user-manager.url=http://localhost:8080 \
-Dkeycloak.url=https://keycloakurl \
-jar ./target/user-manager-server-1.3.0-runner.jar
Usermanager als native Anwendung erstellen und lokal starten:
./mvnw clean package -Pnative
./target/user-manager-server-1.3.0-runner \
-Dquarkus.oidc.auth-server-url=https://keycloakurl/realms/realmname \
-Dquarkus.mongodb.connection-string=mongodb://localhost:27018 \
-Dozgcloud.user-manager.url=http://localhost:8080 \
-Dkeycloak.url=https://keycloakurl \
-Dozgcloud.keycloak.api.user=usermanagerapiuser \
-Dozgcloud.keycloak.api.password=**** \
-Dozgcloud.keycloak.api.realm=realmname \
-Dozgcloud.keycloak.api.client=alfa \
-Dozgcloud.usersync.period="5m" \
-Xmx32m
Commands
Anzeigen des Verwendeten Speichers:
ps -e -o pid,rss,args | grep application
Anzeigen der Details der Speichernutzung:
pmap -x [pid]
Loggen der Speichernutzung in Datei:
top -b -d1 -o +%MEM | grep user-manager >> usermanager_Xmx32m_long.tsv
Quarkus Speicherverwendung
Minimale quarkus features: cdi, resteasy-reactive, smallrye-context-propagation, vertx
Verbrauchter Speicher ohne festgelegtem Heapspace
Application | Selected additional features | Memory Usage in MB |
---|---|---|
quarkus-test-min-1.0.0-SNAPSHOT-runner | - | 39,232 |
quarkus-test-1.0.0-SNAPSHOT-runner | resteasy-reactive-jackson | 44,172 |
quarkus-test-db-1.0.0-SNAPSHOT-runner | mongodb-client, mongodb-panache, narayana-jta, resteasy-reactive-jackson | 46,936 |
quarkus-test-um-1.0.0-SNAPSHOT-runner | config-yaml, grpc-server, micrometer, mongodb-client, mongodb-panache, narayana-jta, smallrye-health, scheduler | 52,068 |
quarkus-test-oidc-1.0.0-SNAPSHOT-runner | config-yaml, grpc-server, micrometer, mongodb-client, mongodb-panache, narayana-jta, smallrye-health, scheduler, oidc, keycloak-admin | 71,580 |
user-manager-server-1.3.0-SNAPSHOT-runner | Usermanager Projekt | 124,164 |
Speicher bei Last
Lastest wurde über SoapUI (Projekt Usermanager user-manager-server/src/test/resources/Usermanager-REST-Last.xml) gemacht
Heapspace | max Memory Usage in MB | max Transactions/s |
---|---|---|
default | 160 | 300 |
32m | 99 | 115 |
Empfohlene Speichereinstellungen
Prod:
limits:
cpu: "500m"
memory: "192Mi"
requests:
cpu: "50m"
memory: "192Mi"
Dev:
limits:
cpu: "500m"
memory: "100Mi"
requests:
cpu: "50m"
memory: "100Mi"
Weitere Urls
https://e.printstacktrace.blog/graalvm-heap-size-of-native-image-how-to-set-it/
https://quarkus.io/guides/performance-measure
https://www.graalvm.org/22.0/reference-manual/native-image/MemoryManagement/