Features & Nutzung
Der AEP api-reporting-service erfüllt die Aufgabe zur Erfassung, Aufbereitung und Bereitstellung von API-Nutzungsdaten:
- Eigene Nutzungsdaten erfassen & speichern:
- Speicherung aller ein- und ausgehenden API-Requests mit relevanten Metadaten (Zeitstempel, Richtung, Statuscode, MPID).
- Bereitstellung von Nutzungsstatistiken:
- REST API zur Abfrage aggregierter Reporting-Daten.
- Projektionen für kundenspezifische Reports.
- Automatische Generierung von Reports (CSV) und Versand als E-Mail-Anhänge für externe Weiterverarbeitung.
- Integration in Abrechnungs- und Controlling-Prozesse
- Automatisierte monatliche Ermittlung der Nachrichtenzahlen pro Kunde für die Fakturierung.
- Threshold-basierte Benachrichtigung an definierte Empfänger, falls Volumengrenzen überschritten werden.
- Scheduler zur Generierung und zum Versand der monatlichen Reports per E-Mail.
Hardware Anforderungen
Eine Service-Instanz erfordert mindestens 512 MB RAM.
Wir empfehlen 0,4 CPU-Kerne je Instanz.
Logs werden auf die Festplatte geschrieben, entsprechend muss genügend Speicherplatz vorhanden sein.
Abhängigkeiten
Der Service greift auf einen Message-Broker zu, um Nachrichten zu empfangen und zu versenden.
Erforderliche Konfiguration (in den application.properties)
SQL-Datenbank-Verbindung
Der Einsatz des Microservice erfordert Zugriff auf eine SQL-Datenbank. Im Vorfeld muss ein Schema angelegt worden sein. Die Tabellen werden automatisch vom Microservice angelegt (via flyway).
Diese speziellen Datenbankparameter können je nach Bedarf verändert werden. Das Passwort wird als Environment Variable mit übergeben. Momentan werden die Datenbanksysteme Oracle und Postgresql unterstützt.
spring.datasource.url=jdbc:postgresql://localhost:5438/api_report?currentSchema=api_report
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASSWORD}
spring.flyway.schemas=api_report
Im Fall einer Oracle-DB kann sich an den nachfolgenden Parametern orientiert werden. Derzeit wird Oracle Database 19c verwendet
spring.datasource.url=jdbc:oracle:thin:@//api-database-oracle:1521/{ORACLE_PDB}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASSWORD}
spring.flyway.locations=classpath:/db/migration/oracle
spring.flyway.schemas=API_REPORT
spring.jpa.properties.hibernate.default_schema=API_REPORT
Konfiguration der RabbitMQ
Message-Broker einrichten
rabbitmq.host=localhost
rabbitmq.port=5672
rabbitmq.username=guest
rabbitmq.password=${RABBITMQ_PASSWORD}
Sie können sich auch für den Service-Bus von Azure entscheiden, dafür brauchen Sie eine vorhandene Infrastruktur. Um Service-bus zu aktivieren müssen Sie folgende Eigenschaften setzen:
spring.profiles.active=servicebus
spring.cloud.azure.servicebus.connection-string=<Your-Connection-String>
spring.cloud.azure.servicebus.namespace=<Your-Namespace>
E-Mail Server Konfiguration (Spring Mail)
Um den E-Mail-Versand in der Anwendung zu ermöglichen, müssen die folgenden Mail-Properties in der application.properties konfiguriert werden:
spring.mail.host=
spring.mail.port=
spring.mail.username=
spring.mail.password=
spring.mail.properties.mail.smtp.ssl.trust=
E-Mail Scheduler Konfiguration
Sie können den Scheduler-Cronjob konfigurieren, um die Berichtsextraktion und den E-Mail-Versand auszulösen. Standardmäßig ist dieser deaktiviert:
billing-report.scheduler.cron=false
E-Mail Nachrichtenkonfiguration
In diesem Abschnitt werden die Empfänger und der Absender der automatisierten E-Mail-Berichte konfiguriert. Allgemeine Empfänger können für Kunden ohne spezifische Konfiguration festgelegt werden, ebenso wie individuelle Empfänger für jeden Kunden.
- Konfigurieren Sie allgemeine Empfänger für Kunden, deren Gesamtnachrichtenanzahl den Schwellenwert überschreitet und die nicht separat konfiguriert sind, über die Eigenschaft:
billing-report.email.general-recipient-to= - Optional können Sie weitere Empfänger in CC für diese generellen Reports hinzufügen:
billing-report.email.general-recipient-cc= - Konfigurieren Sie individuelle Empfänger pro Kunde mithilfe einer JSON-Liste. Hierbei wird der Kundencode mit To- und Cc-Adressen angegeben:
billing-report.email.customers-json=Beispielwert:
[{"code":"CUST_CODE","to":["test@bertelsmann.de"],"cc":["test@bertelsmann.de"]}, {"code":"CUST_CODE","to":["test@bertelsmann.de"]}] - Definieren Sie die Absenderadresse der E-Mail über die Eigenschaft:
billing-report.email.sender-email=
Optionale Konfigurationen (in den application.properties)
E-Mail Inhalt Nachrichtenkonfiguration
Dieser Abschnitt definiert die Inhalte und Metadaten der ausgehenden E-Mails. Hier können Betreff, Nachrichtentext, Anhangsname sowie der Absendername individuell konfiguriert werden.
billing-report.email.subject=[Testing] Api Monthly Billing Report
billing-report.email.content=Please find the attached CSV Monthly Billing Report generated from Api Reporting Service
billing-report.email.attachment-name=billingReport
billing-report.email.sender-name=API Reporting Service
E-Mail Schwellenwert Konfiguration
Mit dieser Einstellung wird die Mindestanzahl an Nachrichten definiert, ab der ein E-Mail-Bericht versendet wird. Wenn die Gesamtanzahl der Nachrichten eines Kunden diesen Wert überschreitet, erhält der konfigurierte Empfänger den Bericht. Standardmäßig ist der Wert auf 500000 gesetzt.
billing-report.email.threshold-count=500000
Message Broker Detailkonfigurationen
Die folgende Konfiguration besteht darin, die Austauschnamen und die maximale Parallelität für jede Warteschlange festzulegen. Nachfolgend finden Sie alle Standardwerte.
#----------------------------------Client Response queue config--------------------------------------------
clientResponseExchangeName=api.client.response
#consumer
spring.cloud.stream.bindings.clientResponseConsumer-in-0.destination=${clientResponseExchangeName}
spring.cloud.stream.bindings.clientResponseConsumer-in-0.group=report
spring.cloud.stream.rabbit.bindings.clientResponseConsumer-in-0.consumer.max-concurrency=50
#----------------------------------Server Response queue config----------------------------------------
serverResponseExchangeName=api.server.response
#consumer
spring.cloud.stream.bindings.serverResponseConsumer-in-0.destination=${serverResponseExchangeName}
spring.cloud.stream.bindings.serverResponseConsumer-in-0.group=report
spring.cloud.stream.rabbit.bindings.serverResponseConsumer-in-0.consumer.max-concurrency=50
#----------------------------------------------------------------------------------------------------------------