本文记录个人工作中遇到的一个需求与解决方案,希望能帮助到有类似需求的读者。
需求描述
公司某块业务需要接收来自第三方API的请求。但是整个业务相对比较复杂,第三方API的一些特性还需要进一步测试,因此需要在不动现有业务代码的情况下,抽时间对这块业务进行预研。包括:触发第三方API请求的方法,第三方API请求的结构。
条件限制:
于是,第一时间我的构想是:
解决思路构想
根据上述解决思路,想着以最快最方便的方式搭建好并部署,采用图形化的宝塔面板部署;IDEA 远程debug, 因此本文学习目标如下:
学习目标
快速创建一个Maven项目,并引入所需依赖,配置跨域,本地测试启动成功即可。
其中,所需依赖、部分代码:
主要依赖 fast-json ,用于快速测试接收第三方API的请求与返回结果
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.73version>
dependency>
@Controller
@CrossOrigin(origins = "*", maxAge = 3600)
public class BasicController {
@PostMapping("/api/accept")
public Object handleExternalRequest(@RequestBody String requestData) {
String response = "请求已接收:" + requestData;
System.out.println(response);
return JSON.parse(response);
}
}
我们首先要准备一个服务器,并事先安装好宝塔面板。现在一般的云服务器都提供初始的宝塔面板安装,本文这里就不赘述。
有了宝塔之后,在宝塔面板上传我们打包好的项目文件。目录随意,但咱最好稍微记一下,呆会会用到:
我们可以使用宝塔面板提供的项目管理启动 Java 项目,图形化界面非常方便,也可以在终端使用命令行。
赶时间,我借宝塔把文件上传上去之后,用终端启动项目:
java -jar [jar_name]
启动完成就可以关掉了,我们接下来要使用的是IDEA 远程debug, 要添加参数。
如图所示,在我们平时点击 IDEA 启动/debug 的位置找到edit, 即Run/Debug Configurations ,进入,参考如下截图配置:
将生成的参数CV 下来,例如我这里是:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,
address=5005
服务器带参启动之前,先确保服务器防火墙开放了这个端口,例如我这里是 5005。 另外要十分注意的是,本地代码需要与远程一致。至少是需要 debug 的模块是一致的。
服务器键入如下命令启动
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar [jar_name]
如果不需要频繁修改代码重新上传的话,使用后台启动:
nohup java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar [jar_name]
本文是基于一个实际的需求记录的解决过程,采用的是远程debug的方式。但实际上,我们也可以反过来,将自己本地机器配置内网穿透,通过公网ip,接收来自第三方API的请求并在自己本地debug。这种方式舒服得多,但风险也是对等的,将自己甚至内网的IP桥接到公网并暴露了。
若遇到类似需求,读者酌情选用远程 Debug 与 内网穿透
通过本文我个人遇到的需求,我们一起学习了:
希望本文有一定的参考价值,帮助到有类似需求的同学。