(Java微服务项目实战)Netty私有协议栈在预付卡系统中的应用

在这里插入图片描述

1 在业务场景中学Netty

在业务场景中学Netty包含了以下功能

  • SpringBoot整合Netty-搭建支付前置系统
  • Netty粘包/拆包问题处理
  • Netty编解码技术
  • 私有协议栈的设计与代码实现(基于POS签到,签退讲解原理)
  • Netty整合Nacos实现服务的注册与发现
  • Netty开发POS前置支付、退款业务
  • Netty基于长连接对设备进行远程管理
  • 百万POS终端设备场景下Netty调优
  • Netty架构剖析与线程模型
  • Netty项目实战版本八股文
    在这里插入图片描述

2 预付卡系统中POS和前置系统功能

  • 消费:在POS上发起消费功能
  • 消费冲正:自动发起取消上一笔的消费交易
  • 消费撤销:在POS上发起消费撤销交易
  • 消费撤销冲正:自动发起上一笔的消费撤销交易
  • 签到:POS终端只有签到成功后才可以进行交易
  • 重打印:消费成功后打印小票如果没有成功则使用重打印进行打印
  • 余额查询:查询预付卡中的余额
    在这里插入图片描述

3 POS和前置系统协议设计

3.1 消息头数据模型设计

消息头数据属性包含消息的总长度,消息流水号,协议版本号,终端逻辑编号,终端物理编号,商户编号,操作员,批次号,交易号

字段长度(字节)类型说明
Message Length4Integer消息的总长度(字节)注:消息头长度是加密后消息的总长度,加密只是对内容进行加密。
Sequence ID4Long消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)在同一个业务里面,都用同一个消息流水号。
协议版本号4Bytes协议版本号,1.0
终端逻辑编号10Bytes设备逻辑ID号
终端物理编号20Bytes设备物理ID号
商户编号10Bytes商户编号
操作员2Bytes终端本地的操作员编号。
批次号4Integer除终端签到外,其他交易均需要带上批次号。
交易号4Integer终端每发送一次交易,交易号都加1

消息头同时适用于终端往服务端和服务端往终端发送的消息。

批次号: 除终端签到外,终端上送交易均需要带上批次号,而服务端只在签到返回时带上。

交易号:终端每次上送一笔交易,都需要对交易号递增加1,断电保持。

操作员:终端本地管理的操作员编号

3.2 消息体数据模型设计

消息体主要由指令ID和业务内容组成

业务功能主要有: 签到, 签退, 交易(含消费,撤销,重打印,退货等多种业务), 结算等

4 POS和前置系统签到功能设计

POS和前置系统所有功能采用自定义二进制私有协议进行功能实现,今天来设计签到功能具体协议。该功能会使用用到Netty中的粘包/拆包、编解码技术、私有协议栈的综合应用。

4.1 签到私有协议的设计

签到请求消息体

字段长度(字节)类型说明
CommandID4Integer注册指令(0x80000001)
VersionNo4String1.0

签到,如果上次有做签退,那么就分配新的批次值,如果上次没有做签退,那么继续沿用原来的批次值

签到响应消息体

字段长度(字节)类型说明
CommandID4Integer操作指令
签到结果1byte0:成功 1:失败
加密算法1byte0:DES 1:3DES
WorkKey20byte签名密钥的密文+4个校验字节
PinKey20bytePin密钥的密文+4个校验字节
BatchNo4Integer每次注册提供的批次号(1-999999可循环使用)
ServerTime14StringyyyyMMddHHmmss

5 Netty如何实现POS和前置系统的签到功能

5.1 粘包/拆包功能的应用

在这里插入图片描述

1.服务端分两次读取到数据包,没有产生粘包和拆包

2.服务端一次读取到两个数据包,两个数据包粘到了一起,被称为TCP粘包

3.服务端分两次读取到两个数据包,第一次读取到了Data1的完整包和Data2包的部分内容,第二次读取到了Data2包余下的内容,这被称为拆包

4.服务端分两次读取到两个数据包,第一次读取到Data1的部分包,第二次读取到了Data1余下的包和Data2包完整包

Netty中粘包拆包的两种解决方案分隔符(DelimiterBaseFrameDecoder)和定长解码器 (FixedLengthFrameDecoder)在该项目中我们使用定长解码器解决粘包和拆包问题

5.2 编解码技术的应用

预付卡平台基于私有协议使用二进制格式数据对交易数据进行编解码,Netty中支持常见的编解码框架比如Google Protobuf,Facebook Thrift,MessagePack等编解码框架。

5.3 私有协议栈的应用

私有协议栈我们在第3小节已经设置好,主要包括消息头和消息体两部分。在使用私有协议的过程中我们需要对协议进行编解码。

6 配套视频

欢迎沟通交流技术和支付业务,一起探讨聚合支付/预付卡系统业务、技术、系统架构、微服务、容器化。并结合聚合支付系统深入技术框架/微服务原理及分布式事务原理。
在这里插入图片描述

  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值