Receive gICS notifications and send them to a Kafka topic
This is a minimal Kafka producer which exposes a single HTTP endpoint to receive messages via the gICS notifications service (connectionType: HTTP) and sends them to a Kafka topic.
The POST endpoint for receiving notifications is /notification with the notification as payload (JSON).
Health endpoint to test service availability and successful Kafka broker connection. It queries target topic metadata to check this.
200 Ok
{
"healthy": true
}or:
503 Service Unavailable
| Name | Default | Description |
|---|---|---|
app.name |
gics-to-kafka | Application name |
app.log-level |
info | Log level (error,warn,info,debug,trace) |
app.http.auth.user |
test | HTTP endpoint Basic Auth user |
app.http.auth.password |
test | HTTP endpoint Basic Auth password |
app.http.port |
8080 | HTTP endpoint port |
kafka.bootstrap-servers |
localhost:9092 | Kafka brokers |
kafka.security-protocol |
ssl | Kafka communication protocol |
kafka.output-topic |
gics-notification | Kafka topic to produce to |
kafka.ssl.ca-location |
/app/cert/kafka-ca.pem | Kafka CA certificate location |
kafka.ssl.certificate-location |
/app/cert/app-cert.pem | Client certificate location |
kafka.ssl.key-location |
/app/cert/app-key.pem | Client key location |
kafka.ssl.key-password |
Client key password |
Override configuration properties by providing environment variables with their respective names.
Upper case env variables are supported as well as underscores (_) instead of . and -.
In order to receive notifications from gICS, the notification service has to be enabled and configured accordingly.
The following SQL script can be used to update the configuration table in the notification_service database:
USE `notification_service`;
UPDATE `configuration` SET `value` =
'<org.emau.icmvc.ttp.notification.service.model.config.NotificationConfig>
<consumerConfigs>
<param>
<key>HTTPConsumer</key>
<value class="org.emau.icmvc.ttp.notification.service.model.config.ConsumerConfig">
<connectionType>HTTP</connectionType>
<messageTypes>
<string>*</string>
</messageTypes>
<excludeClientIdFilter
class="set">
<string>E-PIX_Web</string>
</excludeClientIdFilter>
<parameter>
<param>
<key>url</key>
<value>http://gics-to-kafka:8080/notification</value>
</param>
<param>
<key>username</key>
<value>test</value>
</param>
<param>
<key>password</key>
<value>test</value>
</param>
</parameter>
</value>
</param>
</consumerConfigs>
</org.emau.icmvc.ttp.notification.service.model.config.NotificationConfig>'
WHERE `configKey` = 'notification.config';The docker image runs as user 65532 (nonroot in container).
You can override the USER instructions with any user / group id.
This might be necessary when providing a private key certificate with 400 permissions.
Keep default internal HTTP port 8080 when running in Docker as the health check instruction tests against this port.
Example via docker compose:
gics-to-kafka:
image: ghcr.io/diz-unimr/gics-to-kafka:latest
restart: unless-stopped
environment:
APP_NAME: gics-to-kafka
APP_HTTP_AUTH_USER: test
APP_HTTP_AUTH_PASSWORD: test
APP_LOG_LEVEL: info
KAFKA_BOOTSTRAP_SERVERS: kafka:19092
KAFKA_SECURITY_PROTOCOL: SSL
KAFKA_SSL_KEY_PASSWORD: private-key-password
KAFKA_OUTPUT_TOPIC: gics-notification
volumes:
- ./cert/ca-cert:/app/cert/kafka-ca.pem:ro
- ./cert/gics-to-kafka.pem:/app/cert/app-cert.pem:ro
- ./cert/gics-to-kafka.key:/app/cert/app-key.pem:ro