【发布时间】:2019-04-09 23:56:35
【问题描述】:
我需要知道如何让两个 Spring restful 应用程序定期通信(假设每 5 秒一次),以便每次都将焦点返回到调用应用程序,并且两个应用程序之间的通信继续进行,直到被调用停止特定的休息端点?
所以,目前我在本地主机中有两个独立的 Spring Boot Restful 应用程序,但配置为具有不同的端口。因此,我如何制作第一个应用程序,在该应用程序中,rest api 调用该方法以启动与其他应用程序的通信(并发送实体数据)(接收和保存实体数据)。确实必不可少的是定期通信的持续性,直到被第一个应用程序中的休息端点的特定调用停止。
好的,我会尝试详细说明。让我们尽可能简单。 另一个 rest 应用程序类似于一个设备或应用程序,它模拟每 5 秒产生传感器数据的设备,并将其发送到另一个接收数据并将其保存到数据库的 rest 应用程序。数据模型非常简单:
@Entity
@JsonIgnoreProperties(ignoreUnknown = true)
public class DeviceData implements Serializable {
@JsonIgnore
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@NotNull
private LocalDateTime timestamp;
@NotNull
private integer sensorId;
@Column(precision = 21, scale = 2)
private BigDecimal value;
...
}
此基于此模型的传感器数据将在运行的应用程序中生成/模拟(例如使用随机数和时间戳),假设在本地端口 8090 中。然后必须每 5 秒将数据发送到在另一个中休息 api,接收应用程序(在本地端口 8080 中运行)显然也需要具有相同的数据模型。在接收应用程序中,我们可能需要以下内容来捕获生成的数据:
@RequestMapping(value = "/plugindata", method = RequestMethod.POST)
public ResponseEntity<DeviceData> getDeviceData(@RequestBody DeviceData deviceData) {
... save to db ....
return new ResponseEntity<>(deviceData, HttpStatus.OK);
}
此外,从接收(因此也是控制)应用程序中,我们需要以某种方式打开/关闭生成传感器数据的设备应用程序。显然,我们需要位于两个应用程序的 rest 控制器中的 too rest api。在设备应用中类似于:
@RequestMapping(value = "/devices/{deviceid}/onOff/{onOffval}", method = RequestMethod.GET)
public ResponseEntity<Boolean> turnDeviceOnOff(@PathVariable String deviceid,
@PathVariable boolean onOffval) {
if (onOffval == false) {
this.isDeviceOn = false;
return new ResponseEntity<>(false, HttpStatus.OK);
} else {
try {
this.isDeviceOn = true;
return new ResponseEntity<>(true, HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(false, HttpStatus.NOT_FOUND);
}
}
}
...在接收(控制)应用程序中,我们还需要从前面的应用程序调用类似的休息方法和端点。所以,在前面的应用程序中,我们有一个开关来打开/关闭生成器设备 - 实际上是通过控制应用程序到设备应用程序进行调解的,明白吗?
我希望这能澄清更多
【问题讨论】:
-
最简单的方法是让一个 cron 作业代表另一个应用程序调用其中一个应用程序。
-
这是一个非常不清楚的程序。不能再具体点吗?
标签: java rest spring-boot