9.3. Spring Boot Narayana 복구 컨트롤러 구성

다음 예제에서는 복구 컨트롤러를 사용하여 OpenShift에서 작동하도록narayana를 구성하는 방법을 보여줍니다.

절차

  1. 샘플 application.properties 파일입니다. Kubernetes yaml 설명자에서 다음 옵션을 교체합니다.

    # Cluster
    cluster.nodename=1
    cluster.base-dir=./target/tx
    
    # Transaction Data
    spring.jta.transaction-manager-id=${cluster.nodename}
    spring.jta.log-dir=${cluster.base-dir}/store/${cluster.nodename}
    
    # Narayana recovery settings
    snowdrop.narayana.openshift.recovery.enabled=true
    snowdrop.narayana.openshift.recovery.current-pod-name=${cluster.nodename}
    # You must enable resource filtering in order to inject the Maven artifactId
    snowdrop.narayana.openshift.recovery.statefulset=${project.artifactId}
    snowdrop.narayana.openshift.recovery.status-dir=${cluster.base-dir}/status
  2. 종료와 관련된 트랜잭션 및 정보를 모두 저장하려면 공유 볼륨이 필요합니다. 다음과 같이 StatefulSet yaml 설명자에 마운트할 수 있습니다.

    apiVersion: apps/v1beta1
    kind: StatefulSet
    #...
    spec:
    #...
      template:
    #...
        spec:
          containers:
          - env:
            - name: CLUSTER_BASE_DIR
              value: /var/transaction/data
              # Override CLUSTER_NODENAME with Kubernetes Downward API (to use `pod-0`, `pod-1` etc. as tx manager id)
            - name: CLUSTER_NODENAME
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.name
    #...
            volumeMounts:
            - mountPath: /var/transaction/data
              name: the-name-of-the-shared-volume
    #...

Camel Extension for Spring Bootnaana Recovery Controller

Camel이 Spring Boot 애플리케이션 컨텍스트에서 발견되면 보류 중인 모든 트랜잭션을 플러시하기 전에 Camel 컨텍스트가 자동으로 중지됩니다.