JDK17+Dubbo3.3.2搭建企业级支付系统-预付卡支付交易微服务
JDK17+Dubbo3.3.2搭建企业级支付系统-预付卡支付交易微服务

JDK17+SpringCloud2023.0.3搭建企业级支付系统-预付卡支付交易微服务上一篇文章我们基于SpringCloud2023.0.3对预付卡支付交易业务进行了微服务化基础框架的搭建,并完成了POS智能硬件->POSP前置网关服务->预付卡支付交易微服务调用整体流程代码的实现。今天我们基于Dubbo3.3.2对预付卡支付交易进行微服务化,并对POSP前置网关服务进行微服务调用的调整,从SpringCloud切换为Dubbo。后续预付卡支付交易业务所有代码会基于SpringCloud和Dubbo这两个技术方案同时进行实现。
完整代码在文章最后,如果觉得本篇文章对你有用,记得点赞、关注、收藏哦。你的支持是我持续更新的动力!
接下来开始我们今天基于Dubbo3.3.2搭建支付微服务的流程

Dubbo版本支付微服务项目整体目录

1 搭建预付卡支付交易微服务-基于Dubbo
1.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">
<packaging>pom</packaging>
<modules>
<module>posp-gateway-client</module>
<module>pay-dubbo</module>
<module>posp-gateway-dubbo</module>
<module>pay-api-dubbo</module>
</modules>
<modelVersion>4.0.0</modelVersion>
<groupId>cn.itbeien</groupId>
<artifactId>pay-labs-dubbo-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>
<spring-boot.version>3.3.6</spring-boot.version>
<dubbo.version>3.3.2</dubbo.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring-boot.version}</version>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-bom</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.17.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.34</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.53</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.16</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>${netty_version}</version>
</dependency>
<dependency>
<groupId>cn.itbeien</groupId>
<artifactId>pay-api-dubbo</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
1.2 支付交易微服务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-dubbo-master</artifactId>
<version>1.0</version>
</parent>
<artifactId>pay-dubbo</artifactId>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-nacos-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>cn.itbeien</groupId>
<artifactId>pay-api-dubbo</artifactId>
</dependency>
</dependencies>
</project>
1.3 配置信息
dubbo.registry.address=nacos://${nacos.address:192.168.0.105}:8848?username=nacos&password=nacos
dubbo.registry.register-mode=instance
dubbo.protocol.name=tri
dubbo.protocol.port=50051
dubbo.application.qos-enable=true
dubbo.application.name=PayDubboApplication
dubbo.application.qos-port=22222
dubbo.application.qos-accept-foreign-ip=false
dubbo.application.logger=slf4j
dubbo.application.parameters.namespace=84c5ce16-6784-412d-8da8-d42310249cc8
1.4 Dubbo核心代码
在整体的业务流程中POS智能终端->POSP前置服务->Dubbo版本支付微服务,支付微服务属于服务提供方。我们需要使用Dubbo中的两个注解@EnableDubbo和@DubboService开启和声明为Dubbo服务,该服务会被注册到配置中心。具体见下方代码
支付系统启动入口
package cn.itbeien.pay;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author itbeien
* 项目网站:https://www.itbeien.cn
* 公众号:贝恩聊架构
* 全网同名,欢迎小伙伴们关注
* Copyright© 2024 itbeien
*/
@SpringBootApplication
@EnableDubbo
public class PayDubboApplication {
public static void main(String[] args) {
SpringApplication.run(PayDubboApplication.class,args);
}
}
支付业务服务类代码
package cn.itbeien.pay.service;
import cn.itbeien.api.IPayService;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
/**
* @author itbeien
* 项目网站:https://www.itbeien.cn
* 公众号:贝恩聊架构
* 全网同名,欢迎小伙伴们关注
* Copyright© 2024 itbeien
*/
@DubboService
@Slf4j
public class PayService implements IPayService {
@Override
public String pay(String data) {
log.info("进入到dubbo版本支付系统{}",data);
return "OK";
}
}
1.5 启动支付微服务
启动服务后,检查Nacos配置中心是否有支付微服务的元数据信息


2 搭建POSP前置系统-基于Dubbo
前置服务和POS智能终端的代码未变,还是使用Netty基于TCP/IP和POS通信,具体代码见文章最后。下方代码为基于Dubbo调用支付微服务代码改造和配置信息
2.1 POSP前置服务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-dubbo-master</artifactId>
<version>1.0</version>
</parent>
<artifactId>posp-gateway-dubbo</artifactId>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-nacos-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>cn.itbeien</groupId>
<artifactId>pay-api-dubbo</artifactId>
</dependency>
</dependencies>
</project>
2.2 配置信息
dubbo.registry.address=nacos://${nacos.address:192.168.0.105}:8848?username=nacos&password=nacos
dubbo.registry.register-mode=instance
dubbo.protocol.name=tri
dubbo.protocol.port=50051
dubbo.application.qos-enable=true
dubbo.application.name=GatewayApplication
dubbo.application.qos-port=33333
dubbo.application.qos-accept-foreign-ip=false
dubbo.application.logger=slf4j
dubbo.application.parameters.namespace=84c5ce16-6784-412d-8da8-d42310249cc8
netty.port=8600
netty.url=127.0.0.1
2.3 Dubbo核心代码
POSP前置服务为服务的调用方,需要在调用代码中添加@DubboReference,添加该注解的方法需要使用Dubbo进行远程调用,IPayService为Dubbo中声明的远程调用接口,该接口在预付卡-支付微服务中实现。POSP前置服务中只需引用接口工程然后注入接口即可。
package cn.itbeien.service.impl;
import cn.itbeien.api.IPayService;
import cn.itbeien.service.IPayConsumerService;
import com.alibaba.fastjson2.JSONObject;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
/**
* @author itbeien
* 项目网站:https://www.itbeien.cn
* 公众号:贝恩聊架构
* 全网同名,欢迎小伙伴们关注
* 从服务注册中心发现pay服务并进行消费调用
* Copyright© 2024 itbeien
*/
@Service
@Slf4j
public class PayConsumerService implements IPayConsumerService {
@DubboReference
private IPayService payService;
@Override
public String callPayService(JSONObject jsonObject) {
log.info("进入到gateway调用支付服务方法...");
return payService.pay(jsonObject.toJSONString());
}
}
2.4 启动POSP前置服务

2.5 启动POSP服务客户端和整体流程
启动POS客户端用于测试整体流程,POS客户端基于TCP/IP发送支付指令给到POSP服务,POSP服务接收到支付指令后通过Dubbo远程调用支付微服务



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

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

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