JDK17+SpringBoot3.4.0+Netty4.1.115搭建企业级支付系统POS网关
JDK17+SpringBoot3.4.0+Netty4.1.115搭建企业级支付系统POS网关

今天开始,我手把手的带着大家基于JDK17及微服务框架搭建企业级支付系统中的各微服务,今天我们搭建POS网关系统基础框架,后续把功能完善后会同步到文章最后的代码仓库
在上一篇文章SpringCloudAlibaba之图文搞懂微服务核心组件在企业级支付系统中的应用 中我们基于微服务组件讲解了企业级支付系统各业务对象在各大组件中的应用,今天我们基于JDK17、SpringBoot3.4.0、Netty4.1.115搭建支付网关系统中的POS前置服务,POS前置系统主要服务于支付系统中的智能硬件终端,用户可以在终端上完成支付功能。源码地址附录在文章最后
1 企业级支付系统-POS前置服务
我们在前言已经把POS前置系统是干什么的进行了阐述,接下来我们一起通过下图掌握POS前置系统在整体架构中的位置,以及通过POS前置系统如何把系统中的用户、硬件终端和企业级支付系统的子系统核心支付交易系统连接在一起,完成用户在终端设备的支付功能。终端设备支持基于两种介质的支付能力,一种是基于实体卡(预付卡)另外一种是基于电子卡(二维码)

2 POS前置服务搭建
2.1 环境要求
- JDK17
- SpringBoot3.4.0
- Netty4.1.115
- SpringCloud2023.0.3
- SpringCloudAlibaba2023.0.1.3
Netty主要用于搭建TCP/IP协议服务端,硬件终端通过TCP/IP协议和POS前置服务进行网络通讯。然后由POS前置系统通过服务发现机制调用支付交易微服务。SpringBoot3.4.0的作用就不用多说了,主要用于整合各大框架和更好、更便捷的创建POS前置服务
2.2 创建POS前置系统父工程
2.2.1 配置pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<packaging>pom</packaging>
<modules>
<module>posp-gateway</module>
<module>posp-gateway-client</module>
</modules>
<modelVersion>4.0.0</modelVersion>
<groupId>cn.itbeien</groupId>
<artifactId>pay-labs-master</artifactId>
<version>1.0</version>
<properties>
<java.version>17</java.version>
<netty_version>4.1.115.Final</netty_version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Netty 4.1.115.Final -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 移除嵌入式tomcat插件 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2023.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2023.0.1.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.17.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
2.2.2 POS前置服务子工程(posp-gateway)
2.2.2.1 子工程pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.itbeien</groupId>
<artifactId>pay-labs-master</artifactId>
<version>1.0</version>
</parent>
<artifactId>posp-gateway</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
</dependencies>
</project>
2.2.2.2 POS前置服务启动类
package com.beien;
import com.beien.socket.NettyServer;
import io.netty.channel.Channel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import jakarta.annotation.Resource;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* SpringBoot+Netty启动类
* @author itbeien
* 项目网站:https://www.itbeien.cn
* 公众号:贝恩聊架构
* 全网同名,欢迎小伙伴们关注
* Copyright© 2024 itbeien
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients //用于创建Feign代理实现类->动态代理
public class Application implements CommandLineRunner {
@Resource
private NettyServer nettyServer;
private static Logger logger = LoggerFactory.getLogger(Application.class);
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(String... args) throws Exception {
logger.info("NettyServer启动服务开始 port:8600");
Future<Channel> future = Executors.newFixedThreadPool(2).submit(nettyServer);
Channel channel = future.get();
if (null == channel) throw new RuntimeException("netty server start error channel is null");
while (!channel.isActive()) {
logger.info("NettyServer启动服务 ...");
Thread.sleep(500);
}
logger.info("NettyServer启动服务完成 {}", channel.localAddress());
}
}
其它的整合Netty和微服务的子项目功能请自行查看源代码,源代码地址在文章最后,代码会持续更新建议Star和关注,后续方便查看文档结合源码进行学习,你的 ⭐️ Star ⭐️,是作者持续更新的动力!
2.3 项目结构说明
今天发布的项目源码分为两个子项目,POS前置系统和POS前置客户端系统(模拟硬件终端),硬件终端到POS前置采用TCP/IP。前置系统到支付交易微服务采用HTTP,注册和配置中心使用Nacos

欢迎大家关注我的项目实战内容itbeien.cn,一起学习一起进步,在项目和业务中理解各种技术。

欢迎沟通交流技术和支付业务,一起探讨聚合支付/预付卡系统业务、技术、系统架构、微服务、容器化。并结合聚合支付系统深入技术框架/微服务原理及分布式事务原理。加入我的知识星球吧

跟着我学微服务系列
01跟着我学微服务,什么是微服务?微服务有哪些主流解决方案?
05SpringCloudAlibaba之图文搞懂微服务核心组件在企业级支付系统中的应用
贝恩聊架构-项目实战地址
3 源码地址
跟着我学微服务-基于企业级支付项目系列文章、资料和源代码会同步到以下地址,代码和资料每周都会同步更新
该仓库地址主要用于基于企业级支付系统,学习微服务整体技术栈