基于 Springboot 的 Bark 通知辅助处理项目
基于 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 通知辅助处理项目相关推荐
- 基于SpringBoot开发一套完整的项目(一)准备工作
基于SpringBoot开发一套完整的项目(一)准备工作 1.1 SpringBoot简介 ① 为所有Spring 开发提供一个更快更广泛的人门体验. ② 零配置.无冗余代码生成和XML 强制配置,遵 ...
- SpringBoot实现代码生成器——基于SpringBoot和Vue的后台管理系统项目系列博客(十)
系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...
- SpringBoot实现1对1、1对多、多对多关联查询——基于SpringBoot和Vue的后台管理系统项目系列博客(十八)
系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...
- SpringBoot和Vue集成Markdown和多级评论——基于SpringBoot和Vue的后台管理系统项目系列博客(二十三)
系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...
- SpringBoot实现分页查询——基于SpringBoot和Vue的后台管理系统项目系列博客(七)
系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...
- 基于SpringBoot框架的管理系统【完整项目源码】
基于SpringBoot框架的管理系统 介绍 基于SpringBoot框架的管理系统 简洁版 : 实现 登录 . 注册 . 增 . 删 . 改 . 查 : 可继续完善增加前端.校验.其他功能等: 可作 ...
- 基于SpringBoot+Mybatis框架的商城秒杀项目总结
最近做了一个以SpringBoot+Mybaits为框架前后端分离的商城秒杀项目,主要使用的工具是Idea和Maven,SpringBoot是一个功能十分强大的框架集合,里面包含了很多的框架. 工程的 ...
- 基于Springboot的健身房管理系统(Java项目)
文章目录 一.选题背景意义 二.系统模块划分 三.系统详情截图 一.选题背景意义 健身房管理系统可以更好地帮助健身房实现会员信息管理,健身房设备相关管理,提高健身房的运营效率. 本篇是基于Java-S ...
- 基于Springboot+vue前后端分离的项目--后端笔记
效果图: 1.前言 从零开始搭建一个项目最重要的是选择一个自己熟悉的框架,此项目使用Springboot框架来构建后端结构,使用vue来构建前端页面.数据层我们常用的是Mybatis,这里我大部分使 ...
最新文章
- mapreduce 文件可以切分吗_MapReduce的任务流程
- 学生上课睡觉班主任怎么处理_班主任案例:学生上课睡觉应对策略
- ParameterizedType应用,利用java反射获取参数化类型的class实例
- MySQL数据库服务器搭建及基本管理
- css控制div显示/隐藏方法及2种方法比较原码[转]
- 熊猫猪新系统測试之二:Mac OS X 10.10 优胜美地
- 卡尔曼滤波器及代码实现
- 【Access2007】将Excel表导入至Access2007的当中一张已存在的表之中
- jquery 取的单选按钮组的值
- 【Linux】一步一步学Linux——iconv命令(60)
- 易基因|3文读懂:m6A甲基化在动物肌肉发育中的重要作用(猪+鸡+山羊)
- 数据分析复盘报告,用Excel轻松搞掂!
- 这是我家养的睡莲 开花了
- 【C++】由于找不到xxx.dll,无法继续执行代码,重新安装程序可能会解决此问题。(解决办法)
- 钉钉OA流程审批,Jenkins自动授权通知用户密码
- python bar函数循环_python bar函数怎么使用
- java获取MP3文件的id3信息(包括封面图,歌词,艺术家,标题等)
- 【考前冲刺整理】20220812
- 校园二手物品商城交易平台
- 笔记:新一代视频压缩编码标准-h.264/AVC