Skip to content
Snippets Groups Projects
user avatar
OZGCloud authored
b04390b9
History

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

Related guide section...

SmallRye Health

Monitor your application's health using SmallRye Health

Related guide section...

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/

https://github.com/quarkusio/quarkus/issues/22757