Documentation for a newer release is available. View Latest

Getting Started

Overview

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.