使用 Spring Boot 推送通知

Posted

技术标签:

【中文标题】使用 Spring Boot 推送通知【英文标题】:Push notifications using Spring Boot 【发布时间】:2021-03-01 23:29:44 【问题描述】:

希望大家多多指教。

我有一个 Spring Boot API 和一个移动应用程序。我必须在用户必须做某事之前一小时向他们发送推送通知,比如提醒。我在数据库中存储了特定的日期和时间。

我一直在阅读计划任务,但我一点也不喜欢。

那么,您认为最好的方法是什么?

【问题讨论】:

【参考方案1】:

我一直在阅读计划任务,但我一点也不喜欢。

它还应该如何工作?您需要某种在指定时间触发您的代码的调度程序/计时器。

你可以选择我想到的最简单的解决方案:

long delay = ...; // calculate the delay when the code should be executed
Runnable theCodeToExecute = () -> System.out.println("hello world");
new Thread(() -> 
  try 
      Thread.sleep(delay);
      runnable.run();
  
  catch (Exception e)
      System.err.println(e);
  
).start();

这当然有几个缺点:当你重新启动你的应用程序时,计划任务就消失了。当你有数百个线程处于休眠状态时,它不会很有效。

当然有办法绕过这个:

将您的计时器存储在数据库(或文件)中。并在您发送通知时删除条目。当您的应用程序重新启动时,您只需读取存储的条目并重新启动计时器。

您可以使用任务队列(或排序列表)。并且有一个线程,每 N 秒查找一次队列中的下一个任务。如果此任务已准备就绪,请将其从队列(或列表)中移除并执行代码。


作为替代方案,您当然可以使用已经为您完成所有这些工作的框架,例如 Quartz

【讨论】:

以上是关于使用 Spring Boot 推送通知的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Boot 和 React Native 的提醒推送通知

从 Spring Boot 到 ionic 的 webSocket 推送通知

Spring项目中APN的休息控制器(推送通知)

如何使用 Spring 和 Websocket 构建推送通知服务

spring boot 监听器实例

使用 React Native 前端和 Java Spring 后端创建推送通知系统?