HAP_消息队列_邮箱改造

仅供参考

业务需求:

1. 将邮件任务改造为服务任务,在服务任务中实现邮件发送;
2. 邮件模板的发送类型定义为直接
3. 测试效果
4. 将邮件发送改为队列列模式,由代理理类负责向队列列中发送消息
5. 编写队列列消费类处理理队列列消息,实现邮件的异步发送
13265172-ed037958e275db57.png
image.png
步骤1. components包下新建一个服务任务类```SendEmailMQ.java
  • 图1


    13265172-2eee458b993fe8f7.png
    image.png
package wht.ora20796.components;


import com.hand.hap.account.dto.User;
import com.hand.hap.account.service.IUserService;
import com.hand.hap.activiti.custom.IActivitiBean;
import com.hand.hap.activiti.service.IActivitiEntityService;
import com.hand.hap.hr.dto.Employee;
import com.hand.hap.hr.mapper.EmployeeMapper;
import com.hand.hap.hr.service.IEmployeeService;
import com.hand.hap.hr.service.impl.EmployeeServiceImpl;
import com.hand.hap.message.IMessagePublisher;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.JavaDelegate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


@Component
public class SendEmailMQ implements JavaDelegate, IActivitiBean {

    @Autowired
    private IMessagePublisher messagePublisher;
    @Autowired
    IUserService userService;
    @Autowired
    EmployeeMapper employeeMapper;
    @Override
    public void execute(DelegateExecution delegateExecution) {
        //获取用户消息
        String empcode = delegateExecution.getVariable("initiator", String.class);
        User user = userService.selectByUserName(empcode);
        //String email=user.getEmail();
        Employee employee=employeeMapper.queryByCode(empcode);
        String email=employee.getEmail();

        //添加到消息队列
        // 向 队列:将用户信息发送给接收者,让接收者给用户发邮件
        // messagePublisher.rPush("wht:ora:20796:demo:sendEmail", "shizhou.cui@hand-china.com");
        messagePublisher.rPush("wht:ora:20796:demo:sendEmail",email);
        System.out.println("发送邮件");
    }
    @Override
    public String getBeanName() {
        return "sendEmailMQ";
    }
}


步骤2  更改流程图:```将邮件任务改造为服务任务,在服务任务中实现邮件发送
   右下方的代理表达式${sendEmailMQ}

13265172-cadeb3f6a3f66d66.png
image.png
步骤3:components包下新建一个接收者,接收到队列消息后发送邮件
13265172-cc725b8a9d120746.png
image.png
package wht.ora20796.components;

import com.hand.hap.mail.ReceiverTypeEnum;
import com.hand.hap.mail.dto.MessageReceiver;
import com.hand.hap.mail.service.IMessageService;
import com.hand.hap.message.IMessageConsumer;
import com.hand.hap.message.QueueMonitor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

@Component
@QueueMonitor(queue = "wht:ora:20796:demo:sendEmail")
//wht:ora:2062:demo:sendEmail
public class SendEmailMQReceiver implements IMessageConsumer<String> {
    @Autowired
    private IMessageService messageService;
    /**
     * 邮箱发送
     */
    @Override
    public void onMessage(String s, String s2) {
        System.out.println("接到发送邮件通知");
        //ResponseData responseData = new ResponseData();
        HashMap<String, Object> templateData = new HashMap<String, Object>();
        templateData.put("StudentName", "This is a test email from Demo page");
        templateData.put("UserName","你猜我是谁");
        //收件人,可以有多人
        ArrayList<MessageReceiver> receivers = new ArrayList<>();
        MessageReceiver messageReceiver = new MessageReceiver();
        //  messageReceiver.setMessageAddress("shizhou.cui@hand-china.com");
        messageReceiver.setMessageAddress(s);
        messageReceiver.setMessageType(ReceiverTypeEnum.NORMAL.getCode());
        receivers.add(messageReceiver);
        //messageService.sendMessage(request, "ACT_EMAIL_NOTIFIER", templateData, receivers, (List<Long>) null);
        try {
            messageService.sendMessage(null, "ORA_20796_HOMEWORK", templateData, receivers, (List<Long>) null);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

注意点1:如果你在步骤一死活获取不到user的话,抛出空指针异常,
那要确定你新建的用户已经给它添加为用户了
13265172-210cb5d403850778.png
image.png
13265172-ef6f8c872bc8f6fe.png
image.png

13265172-acb5d263a1f2b8b9.png
image.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值