计次服务 JCounter

简介

提供高可用、高性能的基础计次服务。

应用场景

基础计次服务

应用案例

聚合鉴权 RealMe 和汇信 Credit。

常见问题

接入文档

1.接入方式

应用系统每日写入一个文件,每发生一次交易,在当日文件中记录该交易可能发生的计费内容。

应用系统文件定义

文件名

系统名_yyyymmdd

文件内容

一行一条,json 格式表示,含以下字段:

键值

描述

service_name

系统名,即在 JMan 申请 SUser 时的用户名,如 jarvis_credit

date

日期,yyyymmdd

seq_id

流水号,应用系统的唯一交易标志

timestamp

时间戳,Date.getTime()

app_token

商户的 app_token,由 JMan 分配

operator_id

商户的操作员id,可以是 JAccount 的用户名,可空

function_id

服务名,即计费单元,由应用系统确定,与 service_name 和 seq_id 一起,构成请求的唯一索引

is_success

成功标志,0为失败,1为成功

return_code

应用系统返回码,遵循 jarvis 错误码

示例

文件名:jarvis_credit_20170627 对于一次个人征信报告查询请求,含两个计费单元,记录为:

{"service_name":"jarvis_credit","date":"20170627","seq_id":"12345620170627195548398832","time_stamp":"1498564548797","app_token":"app-9836c3ba-24ff-4d30-9cbb-ee798d955462","operator_id":"test@chinapnr.com","function_id":"10001","is_success":"1","return_code":"90000","user_name":"jf_test"}
{"service_name":"jarvis_credit","date":"20170627","seq_id":"12345620170627195548398832","time_stamp":"1498564548797","app_token":"app-9836c3ba-24ff-4d30-9cbb-ee798d955462","operator_id":"test@chinapnr.com","function_id":"10006","is_success":"1","return_code":"90000","user_name":"jf_test"}

应用系统文件内容推送

应用系统使用 logstash 实时将文件内容推送至 kafka,由 JCounter 接收,logstash 的配置方式参考第2步。

应用系统文件日终上传

应用系统凌晨将前一日文件上传至 JFile,供 JCounter 对账。

应用系统环境说明

应用系统的云端应用与内网应用分别部署,云端对接 JCounter 云端,内网对接 JCounter 内网。

2.logstash 配置说明

logstash 安装环境

硬件准备:通用的硬件服务器; 操作系统准备:Linux 服务器; logstash 安装包:logstash-2.3.3.tar.gz; JDK版本:1.7.80;

修改 /etc/hosts 文件

增加 kafka 服务器 ip-hostname 映射,具体地址参考第3步。

安装 jdk1.7.80 及 logstash-2.3.3

解压缩 jdk 及 logstash 安装包到用户主目录下:

tar xzf jdk-7u80-linux-x64.tar.gz
tar xzf logstash-2.3.3.tar.gz

如果服务器没有 jdk7 配置,修改 logstash 配置文件:

vi ~/logstash-2.3.3/bin/logstash

在文件开头增加以下配置:

JAVA_HOME=~/jdk1.7.0_80
export JAVA_HOME

增加 logstash-kafka 推送配置

新建 logstash-kafka 配置文件:
vi ~/logstash-2.3.3/conf/logstash-kafka.conf
文件内写入:
input {
    file {
        path => ["/app/credit-service/proxy/logs/jarvis_credit_*"]
        start_position => end
        ignore_older => 0
        codec => multiline {
            pattern => "^\t"
            what => "next"
        }
    }
}
filter {
}
output {
    kafka {
        codec => plain {
            format => "%{message}"
        }
        acks => "0"
        batch_size => 16384
        block_on_buffer_full => false
        bootstrap_servers => "192.168.3.101:9092"
        compression_type => "gzip"
        retries => 5
        topic_id => "jcounter_record_test"
        workers => 2
    }
}
其中:
path:替换为应用系统文件目录及文件名
bootstrap_servers:替换为对应 servers 列表,参考第3章
topic_id:替换为对应 topic,参考第3章

增加 logstash 启动脚本

新建 logstash-kafka 启动脚本文件:
vi ~/sbin/startLogstashKafka.sh

文件内写入:

nohup ~/logstash-2.3.3/bin/logstash -f ~/logstash-2.3.3/conf/logstash-kafka.conf > ~/log/logstashkafka 2>&1 &

启动 logstash 服务

./~sbin/startLogstashKafka.sh

3.相关配置项

环境

hosts

kafka topic_id

kafka bootstrap_servers

云端测试

jcounter_record_test

10.23.97.144:9092, 10.23.130.82:9092, 10.23.186.72:9092, 10.23.15.34:9092, 10.23.140.31:9092

云端联调

云端生产

jcounter_record

10.23.97.144:9092, 10.23.130.82:9092, 10.23.186.72:9092, 10.23.15.34:9092, 10.23.140.31:9092

内网测试

192.168.3.101 p2p1-v2

jcounter_record_test

192.168.3.101:9092

内网联调

内网生产

jcounter_record