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("12345678@qq.com");
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接口,所以执行的 最后结果是
代码:
git@github.com:tuyf/rabbitMQ.git
目录结构问题,麻烦自行处理