基于 Springboot 的 Bark 通知辅助处理项目

  • 1 系统介绍
    • 1.1 系统组成
  • 2 技术说明
    • 2.1 系统项目介绍
    • 2.2 使用场景
    • 2.2 系统网络架构图
    • 2.4 系统处理流程图
  • 3 系统运行
    • 3.1 客户端
    • 3.2 服务端
  • 4 系统配置
    • 4.1 服务端配置
      • 4.1.1 Bark 客户端&消息处理配置
      • 4.1.2 统一通知推送服务配置
      • 4.1.3 Nextcloud 配置
    • 4.2 统一通知推送服务客户端配置
  • 5 二次开发
    • 5.1 自定义处理器(Processor)
    • 5.2 自定义转发器(Forwarder)
  • 6 其它配置
    • 6.1 如何获取 Nextcloud 用户 token
    • 6.2 macOS 如何显示通知
      • 6.2.1 浮窗通知
      • 6.2.2 弹窗通知
    • 6.3 客户端运行监控脚本

项目地址:Orainge/bark-processor

1 系统介绍

本项目为基于 Springboot 的 Bark 通知辅助处理项目,项目服务端放置在 Bark 服务端前端,用于接收和处理客户端的 Bark 格式报文的转发请求。

本项目实现的功能:

  • 需要对原始通知信息进行处理,经过修改后再提交给 Bark 服务端

  • 将通知转发到不同平台上

本项目已实现的服务转发平台:

  • 统一通知推送服务(forward-server,基于 websocket-forward 开发)

    • MacOS X 通知(命令行模式)
    • Windows 通知(待开发)
  • Nextcloud 通知(API 模式)

Bark (IOS通知服务)介绍:

  • Bark

  • Bark Server

本项目参考了 apprise 的设计模式,其它参考资料如下:

  • MacOS 通知
  • Windows 通知
  • macos-alert

1.1 系统组成

该系统包含以下两个部分:

  • 服务端:管理客户端,接收客户端的连接,向各接收端分发消息。
  • 客户端:连接服务端,接收来自服务端通知信息,可以扩展开发,实现更多通知的方式。
  • 本项目集成了信息转发框架进行二次开发:websocket-forward

2 技术说明

2.1 系统项目介绍

该系统由Maven进行管理,包含 2 个 model:

  • bark-processor-forward-client:通知客户端
  • bark-processor-server:服务端

其中,客户端和服务端依赖 websocket-forward-utils,因此如果运行项目时提示找不到相应类时,需要手动安装依赖到本地 Maven 仓库。

  • 源码地址:websocket-forward
cd /path/to/project # 进入项目目录
cd websocket-forward-utils # 进入工具包目录# 以下安装方式二选一
# 安装到本地 Maven 仓库(同时安装源码)
mvn source:jar install
# 安装到本地 Maven 仓库(不安装源码)
mvn install

2.2 使用场景

  • 目前正在使用Bark服务,不想改变现有的网络架构
  • 需要转发消息到不同的平台上(跨平台通知)

2.2 系统网络架构图

2.4 系统处理流程图

  • 消息提交到服务器后,先经过 repeat-filter 处理,如果重复了则该消息不会继续发送。
  • 消息经过 processor-list 里的 processor 处理,改变原始信息内容。
  • 消息处理完成后:
    • 发送给 Bark 服务端,经由 Bark 服务端分发到 Bark 客户端。
    • 分发给 forwarder-list 里的 forwarder,将信息分发出去。

3 系统运行

3.1 客户端

客户端打包完成后会生成 .jar 包,该 .jar 包可直接运行。

java -jar bark-processor-forward-client-1.0.jar

3.2 服务端

服务端打包完成后会生成 .jar 包,该 .jar 包可直接运行。

java -jar bark-processor-server-1.0.jar

4 系统配置

4.1 服务端配置

4.1.1 Bark 客户端&消息处理配置

  • 文件名:application-dev.yml/application-prod.yml
api:url: http://127.0.0.1:8080 # bark 服务端地址
  • 文件名:api-config.yml
# Bark 客户端配置
device:config:- device-key: # Bark 服务的 token# 重复发送拦截规则# 如果符合规则,则该消息会检测是否重复发送# 如果重复发送,则拦截,不提交到 Bark 服务端# 关键字 (title-keyword / content-keyword) 匹配模式:正则表达式repeat-filter-list: - title-keyword: "" # 标题里包含什么字符串就进行拦截(留空/null表示任意匹配)content-keyword: "" # 内容里包含什么字符串就进行拦截(留空/null表示任意匹配)interval: 0 # 间隔几秒内只能重复发送一次 (0表示不设置间隔)# 处理规则# 如果符合规则,则该消息会使用 (processor-name) 处理后再提交到 Bark 服务端# 适合一些特殊情况,需要对提交的 Bark 信息处理后再提交到 Bark 服务端# 关键字 (title-keyword / content-keyword) 匹配模式:正则表达式# forwarder-name: 处理器 Bean 名称,需要继承 com.orainge.bark_processor.server.process.processor.Processorprocessor-list: # 处理规则- title-keyword: "" # 标题里包含什么字符串就进行拦截(留空/null表示任意匹配)content-keyword: "" # 内容里包含什么字符串就进行拦截(留空/null表示任意匹配)processor-name: demoProcessor# 转发规则# 将收到的 Bark 信息进行转发# 关键字 (title-keyword / content-keyword) 匹配模式:正则表达式# forwarder-name: 转发器 Bean 名称,需要继承 com.orainge.bark_processor.server.process.forwarder.Forwarder# 系统自带的 forwarder-name:#    [forwardServerForwarder] 统一通知推送服务#  [nextcloudForwarder] Nextcloud 通知服务forwarder-list:- title-keyword: "" # 标题里包含什么字符串就进行拦截(留空/null表示任意匹配)content-keyword: "" # 内容里包含什么字符串就进行拦截(留空/null表示任意匹配)forwarder-name: forwardServerForwarder- title-keyword: (标题1|标题2) # e.g. 标题里包含关键字【标题1】或【标题2】即匹配content-keyword: ""forwarder-name: nextcloudForwarder# 调试模式
debug:# 是否启用调试模式 "true"-是 "false"-否enable: "false"

4.1.2 统一通知推送服务配置

  • 文件名:forward-server-config.yml
# 【统一通知推送服务】服务端配置
websocket-server:response:time-out: 20000 # websocket 中等待回报文的时间(单位:毫秒)# 【统一通知推送服务】允许的客户端列表
websocket-client:list:- id: XXX # 客户端 IDkey: XXX # 密钥description: "XXX" # 客户端描述# keep-alive: true # 是否由服务器定时发送 ping-pong 信息进行保活 (默认不开启)

4.1.3 Nextcloud 配置

  • 文件名称:nextcloud-config.yml
nextcloud:host-list:- host: cloud.xxx.com:9999 # Nextcloud 服务地址(使用https连接)admin-user: adminUser # 要推送的账号所属群组的管理员账号,即该管理员账号能管理目标接收账号admin-password: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX # 管理员账号 token,创建方式见 6.1 如何获取 Nextcloud 用户 token# 接收通知的目标账户notification-user-list:- user1- user2

4.2 统一通知推送服务客户端配置

# 【统一通知推送服务】服务端配置
websocket-server:# bark-processor 服务端 URL/exchange (http->ws; https->wss)url: ws://localhost:9422/exchange# 连接服务端失败后等待多少秒后重试 (默认 5 秒)reconnect-wait: 5# 【统一通知推送服务】客户端配置
websocket-client:id: XXX # 客户端 IDkey: XXX # 密钥# 调试模式
debug:# 是否启用调试模式 "true"-是 "false"-否enable: "false"# terminal-notifier 配置
terminal-notifier:exec-path: "/path/to/terminal-notifier"

5 二次开发

5.1 自定义处理器(Processor)

继承com.orainge.bark_processor.server.process.processor.Processor后,自定义处理逻辑,将 bean 名称加入 processor-list 即可

5.2 自定义转发器(Forwarder)

继承com.orainge.bark_processor.server.process.forwarder.Forwarder后,自定义处理逻辑,将 bean 名称加入 forwarder-list 即可

6 其它配置

6.1 如何获取 Nextcloud 用户 token

  • 页面地址:nextcloud服务地址/settings/user/security

  • 设置-安全-设备和活动链接:页面最底端输入应用名(任意即可),然后点击【创建新应用密码】,即可得到用户token。

6.2 macOS 如何显示通知

  • 通过在 macOS 上执行 shell 命令,即可实现对应效果

  • 在 JAVA 中执行上述命令,即可显示通知。

6.2.1 浮窗通知

浮窗通知使用第三方组件terminal-notifier

terminal-notifier -title "通知标题" -subtitle "副标题" -message "通知内容" -contentImage http://png地址.png

6.2.2 弹窗通知

  • 弹窗通知默认使用使用系统命令osascript
osascript -e 'display dialog "通知内容" buttons {"确定"} default button 1 with title "标题"'
  • 也可以使用第三方组件macos-alert,可在com.orainge.bark_processor.forward.client.util.macos.MacOSAlertUtil修改;客户端配置如下
# macos-alert 配置
macos-alert:# ICON 文件夹路径icon-folder-path: "/path/to/icon"# macos-alert 执行文件路径exec-path: "/path/to/macos-alert"

6.3 客户端运行监控脚本

  • 通过在 crontab 中加入计划任务,实现客户端保活。
  • 监控脚本:/bark-processor-forward-client/src/main/resources/shell/bark_processor_client_monitor.sh

基于 Springboot 的 Bark 通知辅助处理项目相关推荐

  1. 基于SpringBoot开发一套完整的项目(一)准备工作

    基于SpringBoot开发一套完整的项目(一)准备工作 1.1 SpringBoot简介 ① 为所有Spring 开发提供一个更快更广泛的人门体验. ② 零配置.无冗余代码生成和XML 强制配置,遵 ...

  2. SpringBoot实现代码生成器——基于SpringBoot和Vue的后台管理系统项目系列博客(十)

    系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...

  3. SpringBoot实现1对1、1对多、多对多关联查询——基于SpringBoot和Vue的后台管理系统项目系列博客(十八)

    系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...

  4. SpringBoot和Vue集成Markdown和多级评论——基于SpringBoot和Vue的后台管理系统项目系列博客(二十三)

    系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...

  5. SpringBoot实现分页查询——基于SpringBoot和Vue的后台管理系统项目系列博客(七)

    系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...

  6. 基于SpringBoot框架的管理系统【完整项目源码】

    基于SpringBoot框架的管理系统 介绍 基于SpringBoot框架的管理系统 简洁版 : 实现 登录 . 注册 . 增 . 删 . 改 . 查 : 可继续完善增加前端.校验.其他功能等: 可作 ...

  7. 基于SpringBoot+Mybatis框架的商城秒杀项目总结

    最近做了一个以SpringBoot+Mybaits为框架前后端分离的商城秒杀项目,主要使用的工具是Idea和Maven,SpringBoot是一个功能十分强大的框架集合,里面包含了很多的框架. 工程的 ...

  8. 基于Springboot的健身房管理系统(Java项目)

    文章目录 一.选题背景意义 二.系统模块划分 三.系统详情截图 一.选题背景意义 健身房管理系统可以更好地帮助健身房实现会员信息管理,健身房设备相关管理,提高健身房的运营效率. 本篇是基于Java-S ...

  9. 基于Springboot+vue前后端分离的项目--后端笔记

    效果图: 1.前言  从零开始搭建一个项目最重要的是选择一个自己熟悉的框架,此项目使用Springboot框架来构建后端结构,使用vue来构建前端页面.数据层我们常用的是Mybatis,这里我大部分使 ...

最新文章

  1. mapreduce 文件可以切分吗_MapReduce的任务流程
  2. 学生上课睡觉班主任怎么处理_班主任案例:学生上课睡觉应对策略
  3. ParameterizedType应用,利用java反射获取参数化类型的class实例
  4. MySQL数据库服务器搭建及基本管理
  5. css控制div显示/隐藏方法及2种方法比较原码[转]
  6. 熊猫猪新系统測试之二:Mac OS X 10.10 优胜美地
  7. 卡尔曼滤波器及代码实现
  8. 【Access2007】将Excel表导入至Access2007的当中一张已存在的表之中
  9. jquery 取的单选按钮组的值
  10. 【Linux】一步一步学Linux——iconv命令(60)
  11. 易基因|3文读懂:m6A甲基化在动物肌肉发育中的重要作用(猪+鸡+山羊)
  12. 数据分析复盘报告,用Excel轻松搞掂!
  13. 这是我家养的睡莲 开花了
  14. 【C++】由于找不到xxx.dll,无法继续执行代码,重新安装程序可能会解决此问题。(解决办法)
  15. 钉钉OA流程审批,Jenkins自动授权通知用户密码
  16. python bar函数循环_python bar函数怎么使用
  17. java获取MP3文件的id3信息(包括封面图,歌词,艺术家,标题等)
  18. 【考前冲刺整理】20220812
  19. 校园二手物品商城交易平台
  20. 笔记:新一代视频压缩编码标准-h.264/AVC

热门文章

  1. Raid、裸容量、可用容量的概念
  2. 田纳西大学计算机科学,田纳西大学电气工程与计算机科学
  3. 大工之星编程挑战赛第一周题解
  4. spring-rabbit的使用
  5. Calico 报错 calico/node is not ready: BIRD is not ready: BGP not established with(导致 K8S 集群网络无法使用)
  6. 如何从公网访问本地的Zeus?
  7. Kindle 电子书分享
  8. 单片机 李广弟_单片机基础(第3版)
  9. 智能化引领中国铁路发展
  10. 无线运动耳机品牌排行榜前十名,目前最火爆的六款运动耳机推荐