美文网首页
HAP_消息队列_邮箱改造

HAP_消息队列_邮箱改造

作者: 灯下驼贼 | 来源:发表于2018-08-08 21:44 被阅读0次

仅供参考

业务需求:

1. 将邮件任务改造为服务任务,在服务任务中实现邮件发送;
2. 邮件模板的发送类型定义为直接
3. 测试效果
4. 将邮件发送改为队列列模式,由代理理类负责向队列列中发送消息
5. 编写队列列消费类处理理队列列消息,实现邮件的异步发送
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}

image.png
步骤3:components包下新建一个接收者,接收到队列消息后发送邮件
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的话,抛出空指针异常,
那要确定你新建的用户已经给它添加为用户了
image.png image.png
image.png

相关文章

  • HAP_消息队列_邮箱改造

    仅供参考 业务需求: 图1image.png

  • HAP_消息队列练习1

    业务需求: ora20796_deml.html先增加一个按钮:注意data-bind="click:startM...

  • 消息邮箱

    RTX 的消息邮箱其实就是消息队列,这里的消息邮箱可以实现多个数据的传递。

  • HAP_邮箱发送

    在html中定义个按钮 html添加事件函数 接口类: 实现类 控制类:

  • 消息队列使用与改造点

    序言 文档背景 消息队列改造是双创框架升级工作的一部分。 文档主题 文档主要讲述消息队列代码更新后,新的使用方式和...

  • RabbitMQ死信邮箱(DLX)

    DLX,Dead-Letter-Exchange(死信邮箱) 利用DLX,当消息在一个队列中变成死信后,它能被重新...

  • 消息队列:消息队列简介

    1. 什么是消息队列 消息队列(message queue),是一种应用程序的通信方法; 消息队列是 生产者-消费...

  • RabbitMQ面试题:什么是死信队列? --- 2022-04

    DLX,全称为 Dead-Letter-Exchange,死信交换机,死信邮箱。当消息在一个队列中变成死信 (de...

  • 消息中间件

    消息中间件,也可以叫做中央消息队列或者是消息队列(区别于本地消息队列,本地消息队列指的是 JVM 内实现的队列实现...

  • 消息队列对比

    引用: 常用消息队列对比消息队列及常见消息队列介绍 常用消息队列 1. RabbitMQ 用erlang语言开发的...

网友评论

      本文标题:HAP_消息队列_邮箱改造

      本文链接:https://www.haomeiwen.com/subject/tmgxbftx.html