# 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("发送标题")
        // 这里为消息模版id
        .setTemplateId(10000L)
        .setBusinessType("业务类型")
        .setBusinessCode("业务标识别")
        .setExtDataAttribute(Message.RECEIVERS, "xxx@qq.com");
//构建需要替换的变量
BaseVariableData variableData = new BaseVariableData()
                 .setPhone(currentUser.getMobilePhone())
                 .setRealName(currentUser.getRealname());
// 调用发送                
messageService.send(message, variableData);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

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

通过BaseVariableData对象设置的属性将会自动替换需要发送模版中存在的变量,具体替换逻辑可以参考SystemTemplateVariableServiceImpl提供的逻辑

# 3.2 如何自定义发送通道

  • 发送通道需要实现接口ChannelStrategy,并实现send方法
  • 示例代码如下:
/**
 * websocket发送通道
 * 
 * @author : uu
 * @version : v1.0
 * @Date 2021/2/20  15:45
 */
@Slf4j
@Service("WEBSOKET")
public class WebsocketChannel implements ChannelStrategy {

    @Override
    public void send(Message message) {
        // 具体实现
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

注:通道必须手动指定bean名称,且名称规则为消息组件发送通道类型(类型见字典MESSAGE_CHANNEL

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

  • 默认我们提供了一个系统模版变量容器SystemTemplateVariableServiceImpl,但是有时候并不能满足您的需求,此时你可以通过自定义模版变量来替换,代码如下:
public class CustomTemplateVariableServiceImpl implements TemplateVariableService {

    @Override
    public String parseTemplate2Content(String templateContent, BaseVariableData baseVariableData) throws Exception {
        // 模版解析处理,可以参考系统内置的处理方式
    }

    /**
     * 用户名变量
     *
     * @param baseVariableData
     * @return
     */
    @TemplateVariable(name = "${用户姓名}")
    private String getRealName(VariableData baseVariableData) {
        return V.notEmpty(baseVariableData.getRealName()) ? baseVariableData.getRealName() : "";
    }

    /**
     * 手机号变量
     *
     * @param baseVariableData
     * @return
     */
    @TemplateVariable(name = "${手机号}")
    private String getMobilePhone(VariableData baseVariableData) {
        return V.notEmpty(baseVariableData.getPhone()) ? baseVariableData.getPhone() : "";
    }

    /**
     * 邮箱变量
     *
     * @param baseVariableData
     * @return
     */
    @TemplateVariable(name = "${邮箱}")
    private String getEmail(VariableData baseVariableData) {
        return V.notEmpty(baseVariableData.getEmail()) ? baseVariableData.getEmail() : "";
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

注:TemplateVariable#name的变量名称会被自动提取至前端,供新建消息模版选择

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