Мне нужно знать, как заставить два успокаивающих приложения Spring периодически обмениваться данными (скажем, каждые 5 секунд), чтобы фокус всегда возвращался к вызову приложения каждый раз, а связь между двумя приложениями продолжалась до тех пор, пока не прекратится вызовом конкретная конечная точка отдыха?
Итак, на данный момент у меня есть два независимых весенних загрузочных отдыхающих приложения, оба на локальном хосте, но настроены на разные порты. Таким образом, как я могу создать первое приложение, в котором метод вызывается оставшимся API для запуска связи (и отправки данных объекта) с другим приложением (получения и сохранения данных объекта). И действительно, существенным является продолжение периодического общения до тех пор, пока оно не прервано специальным вызовом конечной точки отдыха в первом приложении.
Хорошо, я попытаюсь уточнить немного больше. И давайте сделаем это как можно проще.
Другое приложение отдыха должно быть похоже на устройство или приложение, которое имитирует устройство, генерирующее данные датчика каждые 5 секунд, и отправляет его другому приложению отдыха, которое получает его и сохраняет его в базе данных. Модель для данных очень проста:
@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);
}
Кроме того, из принимающего (и, следовательно, управляющего) приложения, каким-то образом, нам нужно включить / выключить приложение устройства, которое генерирует данные датчика. Очевидно, что для этого тоже нужен api rest, который находится в остальных контроллерах обоих приложений. В приложении устройства что-то вроде:
@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);
}
}
}
... и в принимающем (контролирующем) приложении нам также необходим метод и конечная точка подобного рода, которые будут вызываться из приложения на передней панели. Итак, во фронтальном приложении у нас есть переключатель для включения / выключения генераторного устройства - действительно, опосредовано через управляющее приложение до приложения устройства, понимаете?
Надеюсь, это прояснит еще немного