Skip to content

Beangle Notify API 调用说明 ​

Beangle Notify 是一个基于 Scala 的通知框架,提供了邮件、短信等多种通知方式。本文档介绍了 Notify 的核心 API,帮助开发者快速上手和使用。

模块总览 ​

模块包名功能说明
核心接口org.beangle.notify提供通知的核心接口和基础类
邮件通知org.beangle.notify.mail提供邮件发送功能
短信通知org.beangle.notify.sms提供短信发送功能
通知服务org.beangle.notify.service提供通知服务和消息队列

1. 核心接口 (org.beangle.notify) ​

功能说明 提供通知的核心接口和基础类,定义了通知系统的基本架构。

主要 API

API功能描述使用示例
Message消息接口val message = new SimpleMessage("标题", "内容")
Notifier通知器接口val notifier = new DefaultMailNotifier(sender)
MessageQueue消息队列val queue = new DefaultMessageQueue
AbstractMessage消息抽象类class MyMessage extends AbstractMessage
SimpleMessage简单消息实现val message = new SimpleMessage("标题", "内容")
SendingObserver发送观察者val observer = new SendingObserver { ... }
NotifyException通知异常throw new NotifyException("发送失败")
NotifyLogger通知日志NotifyLogger.info("发送成功")

常用场景示例

scala
// 创建简单消息
val message = new SimpleMessage("通知标题", "通知内容")

// 创建自定义消息
class OrderMessage(val orderId: Long, title: String, content: String) extends AbstractMessage(title, content)

// 使用消息队列
val queue = new DefaultMessageQueue
queue.offer(message)

// 处理队列中的消息
while (!queue.isEmpty) {
  val msg = queue.poll()
  notifier.send(msg)
}

2. 邮件通知 (org.beangle.notify.mail) ​

功能说明 提供邮件发送功能,支持文本和 HTML 邮件,支持附件。

主要 API

API功能描述使用示例
MailMessage邮件消息val mail = new MailMessage("from@example.com", "to@example.com", "主题", "内容")
MailSender邮件发送器val sender = new JavaMailSender(props)
MailNotifier邮件通知器val notifier = new DefaultMailNotifier(sender)
MimeUtilsMIME 工具val mimeMessage = MimeUtils.createMimeMessage(session, mail)
JavaMailSenderJavaMail 实现val sender = new JavaMailSender(props)

常用场景示例

scala
// 配置邮件发送器
val props = new Properties
props.put("mail.smtp.host", "smtp.example.com")
props.put("mail.smtp.port", "25")
props.put("mail.smtp.auth", "true")

val sender = new JavaMailSender(props, "username", "password")

// 创建邮件消息
val mail = new MailMessage(
  "sender@example.com",
  "recipient@example.com",
  "测试邮件",
  "这是一封测试邮件"
)

// 添加抄送和密送
mail.addCc("cc@example.com")
mail.addBcc("bcc@example.com")

// 添加附件
mail.addAttachment("file.txt", new File("/path/to/file.txt"))

// 发送邮件
val notifier = new DefaultMailNotifier(sender)
notifier.send(mail)

// 发送 HTML 邮件
val htmlMail = new MailMessage(
  "sender@example.com",
  "recipient@example.com",
  "HTML 测试邮件",
  "<h1>Hello</h1><p>这是一封 HTML 邮件</p>"
)
htmlMail.isHtml = true
notifier.send(htmlMail)

3. 短信通知 (org.beangle.notify.sms) ​

功能说明 提供短信发送功能,支持多种短信服务商,提供验证码服务。

主要 API

API功能描述使用示例
SmsSender短信发送器val sender = new LixinSmsSender(url, account, password)
Receiver短信接收者val receiver = new Receiver("13800138000")
SmsCodeService验证码服务val codeService = new DefaultSmsCodeService(sender)
SmsSenderFactory短信发送器工厂val sender = SmsSenderFactory.create("lixin", config)
AbstractSmsSender短信发送器抽象类class MySmsSender extends AbstractSmsSender

常用场景示例

scala
// 创建短信发送器(以Lixin为例)
val sender = new LixinSmsSender(
  "http://sms.example.com/send",
  "account",
  "password"
)

// 创建接收者
val receiver = new Receiver("13800138000")

// 发送短信
val result = sender.send(receiver, "您的验证码是:123456")
println(s"发送结果:${result}")

// 使用验证码服务
val codeService = new DefaultSmsCodeService(sender)

// 发送验证码
val code = codeService.sendCode("13800138000", "注册验证")
println(s"发送的验证码:${code}")

// 验证验证码
val valid = codeService.validate("13800138000", "123456")
println(s"验证码是否有效:${valid}")

// 使用发送器工厂
val config = Map(
  "url" -> "http://sms.example.com/send",
  "account" -> "account",
  "password" -> "password"
)
val factorySender = SmsSenderFactory.create("lixin", config)

4. 通知服务 (org.beangle.notify.service) ​

功能说明 提供通知服务和消息队列,支持异步发送和批量处理。

主要 API

API功能描述使用示例
NotifierService通知服务val service = new DefaultNotifierService(queue, task)
NotificationTask通知任务val task = new DefaultNotificationTask(notifiers)
DefaultMessageQueue消息队列实现val queue = new DefaultMessageQueue

常用场景示例

scala
// 创建消息队列
val queue = new DefaultMessageQueue

// 创建邮件通知器
val mailSender = new JavaMailSender(props, "username", "password")
val mailNotifier = new DefaultMailNotifier(mailSender)

// 创建短信通知器
val smsSender = new LixinSmsSender(url, account, password)
val smsNotifier = new SmsNotifier(smsSender)

// 创建通知任务
val task = new DefaultNotificationTask(Map(
  "mail" -> mailNotifier,
  "sms" -> smsNotifier
))

// 创建通知服务
val service = new DefaultNotifierService(queue, task)

// 启动通知服务
service.start()

// 发送邮件通知
val mail = new MailMessage("from@example.com", "to@example.com", "主题", "内容")
service.notify("mail", mail)

// 发送短信通知
val sms = new SmsMessage("13800138000", "短信内容")
service.notify("sms", sms)

// 停止通知服务
service.stop()

5. 短信服务商实现 (org.beangle.notify.sms.vendor) ​

功能说明 提供多种短信服务商的实现,包括Lixin、B2M、ECUPL 等。

主要 API

API功能描述使用示例
LixinSmsSenderLixin短信发送器val sender = new LixinSmsSender(url, account, password)
B2mSmsSenderB2M短信发送器val sender = new B2mSmsSender(url, account, password)
EcuplSmsSenderECUPL短信发送器val sender = new EcuplSmsSender(url, account, password)

常用场景示例

scala
// 使用Lixin短信服务商
val lixinSender = new LixinSmsSender(
  "http://sms.lixin.com/send",
  "your_account",
  "your_password"
)
val lixinResult = lixinSender.send(new Receiver("13800138000"), "测试短信")

// 使用B2M短信服务商
val b2mSender = new B2mSmsSender(
  "http://sms.b2m.com/send",
  "your_account",
  "your_password"
)
val b2mResult = b2mSender.send(new Receiver("13800138000"), "测试短信")

// 使用ECUPL短信服务商
val ecuplSender = new EcuplSmsSender(
  "http://sms.ecupl.edu.cn/send",
  "your_account",
  "your_password"
)
val ecuplResult = ecuplSender.send(new Receiver("13800138000"), "测试短信")

最佳实践 ​

  1. 使用通知服务:优先使用 NotifierService 进行通知,它提供了统一的接口和异步处理
  2. 配置管理:将邮件和短信的配置信息放在配置文件中,便于管理和修改
  3. 异常处理:捕获并处理 NotifyException,确保通知失败不会影响主业务流程
  4. 消息队列:对于批量通知,使用消息队列进行异步处理,提高系统性能
  5. 验证码安全:使用 SmsCodeService 生成和验证验证码,确保验证码的安全性
  6. 服务商选择:根据实际需求选择合适的短信服务商,考虑稳定性、价格等因素
  7. 日志记录:使用 NotifyLogger 记录通知的发送状态,便于问题排查
  8. 测试:在正式环境之前,进行充分的测试,确保通知功能正常
  9. 监控:对通知服务进行监控,及时发现和处理发送失败的情况
  10. 可扩展性:设计时考虑未来可能的通知方式扩展,保持接口的一致性