仅供参考
业务需求:
1. 将邮件任务改造为服务任务,在服务任务中实现邮件发送;
2. 邮件模板的发送类型定义为直接
3. 测试效果
4. 将邮件发送改为队列列模式,由代理理类负责向队列列中发送消息
5. 编写队列列消费类处理理队列列消息,实现邮件的异步发送
![13265172-ed037958e275db57.png](https://i-blog.csdnimg.cn/blog_migrate/dc7f617ccf25f804c4c94d899d7cf878.webp?x-image-process=image/format,png)
image.png
步骤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}
![13265172-cadeb3f6a3f66d66.png](https://i-blog.csdnimg.cn/blog_migrate/c3fd8dc656ba6d4742a19db8a062dc73.webp?x-image-process=image/format,png)
image.png
步骤3:components包下新建一个接收者,接收到队列消息后发送邮件
![13265172-cc725b8a9d120746.png](https://i-blog.csdnimg.cn/blog_migrate/e025076cb164a35d88be52e58633a847.webp?x-image-process=image/format,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](https://i-blog.csdnimg.cn/blog_migrate/d39cb205a4c27deadb60edcb8224c8f9.webp?x-image-process=image/format,png)
image.png
![13265172-ef6f8c872bc8f6fe.png](https://i-blog.csdnimg.cn/blog_migrate/5bd921bedc7571906c37e29aa9ec6b02.webp?x-image-process=image/format,png)
image.png
![13265172-acb5d263a1f2b8b9.png](https://i-blog.csdnimg.cn/blog_migrate/52e5ab7d645d1bf9c220f34218b68c98.webp?x-image-process=image/format,png)
image.png