仅供参考
业务需求:
1. 将邮件任务改造为服务任务,在服务任务中实现邮件发送;
2. 邮件模板的发送类型定义为直接
3. 测试效果
4. 将邮件发送改为队列列模式,由代理理类负责向队列列中发送消息
5. 编写队列列消费类处理理队列列消息,实现邮件的异步发送

步骤1. components包下新建一个服务任务类```SendEmailMQ.java
-
图1
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}

步骤3:components包下新建一个接收者,接收到队列消息后发送邮件

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的话,抛出空指针异常,
那要确定你新建的用户已经给它添加为用户了



网友评论