Getting Started
Overview
-
Database - MonogoDB/Cosmos used for licensing and optionally message logging
-
Kafka - Used by VoP for message logging
-
CSM Reachability - Used by VoP for IBAN deconstruction if party agent BIC is not present in the request message
Configuration and Runtime
The Verification of Payee (VoP) Requester is a stand-alone application that can be run as a service much like any other IPF application deployment. The VoP Requester service can be run as a single instance or multiple. (Further details on performance tuning will be delivered in future releases).
Configuration
The below configuration is the minimum required for the VoP Requester service to run.
| VoP Requester does not require an Akka Cluster to be configured. |
ipf {
mongodb.url = "mongodb://ipf-mongo:27017/vop" (1)
}
ipf.csm-reachability-api.http.client {
host = "http://reachability-app" (2)
port = 8080
}
ipf.verification-of-payee.requester {
responder.fpad.http.client {
host = "http://fpad-app" (3)
port = 8080
}
scheme-membership-ids { (4)
schemes = [
{
name: "FPAD"
processing-entities = [
{processing-entity-code: "", scheme-membership-id: "ICONUK02XXX"}
]
}
]
}
}
common-kafka-client-settings {
bootstrap.servers = "kafka:9092" (5)
}
akka {
kafka {
producer {
kafka-clients = ${common-kafka-client-settings}
}
consumer {
kafka-clients = ${common-kafka-client-settings}
kafka-clients.group.id = vop-requester-consumer-group
}
}
}
Note the following key aspects:
| 1 | Set the MongoDB URL as appropriate for your environment |
| 2 | Set the CSM Reachability hostname and port as appropriate for your environment |
| 3 | Set the FPAD hostname and port as appropriate for your environment |
| 4 | Set the scheme membership ids application for the selected scheme, see Scheme Membership |
| 5 | Set the Kafka URL as appropriate for your environment |
Running
The following docker compose is a VoP Requester service deployment that contains all the required infrastructure/applications (Kafka, MongoDB, Reachability) needed to run the VoP Requester application.
| This represents a sample configuration and is not intended to represent performance concerns which will be covered in another section in future releases. |
services:
# Infrastructure
ipf-mongo:
image: ${docker.registry}/ipf-docker-mongodb:latest
container_name: ipf-mongo
ports:
- "27018:27017"
healthcheck:
test: echo 'db.runCommand("ping").ok' | mongo localhost:27017/test --quiet
volumes:
- ./config/mongodb/settings-iban-plus.json:/tmp/import/settings-iban-plus.json
- ./config/mongodb/settings-iban-structure.json:/tmp/import/settings-iban-structure.json
- ./config/mongodb/02_populate_directory_mapping.sh:/docker-entrypoint-initdb.d/02_populate_directory_mapping.sh
kafka:
image: apache/kafka-native:4.0.0
container_name: kafka
ports:
- "9092:9092"
- "9093:9093"
environment:
- KAFKA_NODE_ID=1
- KAFKA_AUTO_CREATE_TOPICS_ENABLE=true
- KAFKA_CONTROLLER_QUORUM_VOTERS=1@localhost:9094
- KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER
- KAFKA_PROCESS_ROLES=broker,controller
- KAFKA_LOG_RETENTION_MINUTES=10
- KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1
- KAFKA_OFFSETS_TOPIC_NUM_PARTITIONS=1
- KAFKA_LISTENERS=PLAINTEXT://:9092,LOCAL://:9093,CONTROLLER://:9094
- KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=LOCAL:PLAINTEXT,PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,LOCAL://localhost:9093
- KAFKA_CREATE_TOPICS=MESSAGE_LOG:1:1
# Apps
reachability-app:
image: registry.ipf.iconsolutions.com/csm-reachability-application:${icon-csm-reachability-app.version}
container_name: reachability-app
ports:
- "8083:8080"
- "5003:5005"
user: "1000:1000"
environment:
- IPF_JAVA_ARGS=-Dma.glasnost.orika.writeClassFiles=false -Dma.glasnost.orika.writeSourceFiles=false
volumes:
- ${docker-logs-directory}:/ipf/logs
- ./config/reachability-app:/csm-reachability-application/conf
- ./import:/csm-reachability-application/import
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:8080/actuator/health" ]
depends_on:
- ipf-mongo
vop-requester-app:
image: ${docker.registry}/verification-of-payee-requester-application:${project.version}
container_name: vop-requester-app
ports:
- "8080:8080"
- "5005:5005"
volumes:
- ${docker-logs-directory}:/ipf/logs
- ./config/vop-requester-app:/verification-of-payee-requester-application/conf
user: "1000:1000"
environment:
- IPF_JAVA_ARGS=-Dma.glasnost.orika.writeClassFiles=false -Dma.glasnost.orika.writeSourceFiles=false -Dconfig.override_with_env_vars=true
depends_on:
- ipf-mongo
healthcheck:
test: [ "CMD", "curl", "http://localhost:8080/actuator/health" ]
Note the following key aspects:
-
Mongo and Kafka containers are third party images and not supplied by Icon Solutions
-
The CSM Reachability image is created by Icon Solutions and hosted in our ipf-releases repository in Nexus.
-
The VoP Requester app is created by Icon Solutions and hosted in our ipf-releases repository in Nexus.