RabbitMQ之 邮件处理

RabbitMQ 的邮件处理,本篇这里 就是RabbitMQ的异步处理。

主要三个类, Business , Mail , MailMessageListener 和一个 配置文件 async-context.xml

Mail 类是一个 javaBean,不用管:

public class Mail{
    private String from;//发件人
    private String to;//收件人
    private String subject;//邮件标题
    private String content;//邮件内容

类Business 是一个执行类,开始读代码:

  //用户注册
    public void userRegister(){
        //校验用户填写的信息是否完整

        //将用户及相关信息保存到数据库

        //注册成功后发送一条消息表示要发送邮件
        AbstractApplicationContext ctx =
                new ClassPathXmlApplicationContext("async-context.xml");
        RabbitTemplate template = ctx.getBean(RabbitTemplate.class);
        Mail mail = new Mail();
        mail.setTo("[email protected]");
        mail.setSubject("我的一封邮件");
        mail.setContent("我的邮件内容");
        template.convertAndSend(mail);
        ctx.close();
    }
AbstractApplicationContext ctx =
        new ClassPathXmlApplicationContext("async-context.xml"); 是读取async-context.xml"文件
RabbitTemplate template = ctx.getBean(RabbitTemplate.class);是获取对应的发送消息的bean实现

根据xml文件,

<!--配置 RabbitTemplate -->
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory"
                 exchange="mailExchange" routing-key="mail.test" message-converter="jsonMessageConverter"/>

template 得到的是 beanName为amqpTemplate的对象。

使用

template.convertAndSend(mail); 对数据格式做转换 并发送消息, 此时核心的来了:该动作触发了监听类的操作,触发了实际发送邮件的操作。
<!--配置 RabbitTemplate -->
    <rabbit:template id="amqpTemplate" connection-factory="connectionFactory"
                     exchange="mailExchange" routing-key="mail.test" message-converter="jsonMessageConverter"/>

    <!--配置 RabbitAdmin -->
    <rabbit:admin connection-factory="connectionFactory"/>

    <!--配置队列名-->
    <rabbit:queue name="mailQueue"/>

    <!--配置 Exchange -->
    <rabbit:topic-exchange name="mailExchange">
        <rabbit:bindings>
            <rabbit:binding queue="mailQueue" pattern="mail.*"/>
        </rabbit:bindings>
    </rabbit:topic-exchange>

    <!--配置监听-->
    <rabbit:listener-container connection-factory="connectionFactory">
        <rabbit:listener ref="mailMessageListener" queue-names="mailQueue" />
    </rabbit:listener-container>

可以看到 amqpTemplate关联mailExchange , mailExchange关联mailQueue, mailMessageListener监听的是mailQueue队列,

类MailMessageListener 实现的是 MessageListener接口,所以执行的 最后结果是

代码:

[email protected]:tuyf/rabbitMQ.git

目录结构问题,麻烦自行处理

猜你喜欢

转载自blog.csdn.net/tuyf_hs/article/details/88257237