# diboot-message 使用说明

# 1、引入依赖

Maven

<dependency>
    <groupId>com.diboot</groupId>
    <artifactId>diboot-message-spring-boot-starter</artifactId>
    <version>{latestVersion}</version>
</dependency>
1
2
3
4
5

或Gradle:

compile("com.diboot:diboot-message-spring-boot-starter:{latestVersion}")
1

组件依赖的数据表message、message_template,在组件starter初次启动时将自动初始化。

如果使用diboot-devtools,还可一键生成该组件相关的controller等基础代码到本地项目下。

# 2、参数配置:

diboot-message组件有以下配置项,用于初始化设置 配置参数:

# 是否初始化sql,默认true,初始化之后(或非开发环境)可以关闭
diboot.component.message.init-sql=false

# 其他spring mail starter相关的参数按spring的文档配置
# spring.mail.xxx
1
2
3
4
5

# 3. 使用说明

# 3.1 如何发送简单消息通知(邮件为例)

  • diboot-message组件中内置了邮件发送能力,需要邮件发送的场景可以直接使用,调用代码如下:
// 需要发送的消息实体
Message message = new Message()
        .setChannel("EMAIL")
        .setSender("xxx@qq.com")
        .setReceiver("xxx@qq.com")
        .setStatus("SEND")
        .setTitle("发送标题")
        // 这里为消息模版编码
        .setTemplateCode("code")
        .setBusinessType("业务类型")
        .setBusinessCode("业务标识别")
        .setExtDataAttribute(Message.RECEIVERS, "xxx@qq.com");
//构建需要替换的变量
BaseUserVariables variables = new BaseUserVariables()
                 .setPhone(currentUser.getMobilePhone())
                 .setRealName(currentUser.getRealname());
// 调用发送                
messageService.send(message, variables);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Message#setChannel()属性channel的值,需要和发送通道类型保持一致,(类型见字典MESSAGE_CHANNEL

通过 模版变量容器 设置的属性将会自动替换需要发送模版中存在的变量,具体替换逻辑可以参考TemplateUtils#parseTemplateContent提供的逻辑

# 3.2 如何自定义发送通道

  • 发送通道需要实现接口ChannelStrategy,并实现send方法
  • 如扩展短信通道的示例代码如下:
public class SMSChannel implements MessageChannel {

    @Override
    public String type() {
        return Cons.MESSAGE_CHANNEL.SMS.name();
    }

    @Override
    public void send(Message message) {
        System.out.println("SMSChannel 发送短信: "+ message.getContent());
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

# 3.3 如何自定义后端模版变量

# 3.3.1 扩展变量定义类

默认我们提供了一个系统模版变量容器BaseUserVariables,您可以通过自定义任意变量类来扩展,代码如下:

@Getter
@Setter
@Accessors(chain = true)
@Getter @Setter @Accessors(chain = true)
public class MyVariableObj implements Serializable {
    private static final long serialVersionUID = -1993000690817844748L;

    @BindVariable(name = "${验证码}")
    private String vcode;

    @BindVariable(name = "${序列号}")
    private String sn;

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

注:MyVariableObj中的@BindVariable注解对应的变量名称会被自动提取至前端,供新建消息模版选择。

# 3.3.2 注入自定义发送通道与后端模版变量类

since v2.6.0

    @Bean
    public MessageService messageService() {
        return new MessageServiceImpl(
            Arrays.asList(new SimpleEmailChannel(), new SystemMessageChannel(), new SMSChannel()),
            Arrays.asList(BaseUserVariables.class, MyVariableObj.class)
        );
    }
1
2
3
4
5
6
7

使用过程中遇到问题,可加群交流。