MQ消息队列的使用(邮件的发送)

MQ消息队列的使用(邮件的发送)

    • MQ消息队列
    • A:利用Maven加载相关的jar报,当然也可以自己写MQ,用来生产者的消息
    • jms交给spring进行管理
    • C、生产者配置
    • D、创建生产者消息转换器
    • E、消费者配置,监听器配置:
    • 消费者实现MessageListener接口

MQ消息队列

MQ是一种消息队列,目前流行的有RabbitMQ,ActiveMQ等,还有每个互联网公司通常都拥有自己的消息队列的Maven的jar包。通俗的讲消息队列就是一种生产者向队列中发送信息,等待消费者消费取出队列中的信息。
下面对消息队列的使用进行讲解:已发送邮件为例:分为三个步骤
1.本地项目,创建邮件模板,通过JmsTemple发送给MQ,进入消息队列,是不折不扣的生产者。是是运用spring整合activeMQ,需要将jms提供链接的ConnectionFactory交给spring容器管理。
2.mq本身嵌套一个jetty服务器,可存储生产者端发送的消息队列。
3. 消费者端,mq通过messageListener监听器监听并得到消息队列中的消息并对消息做处理。实现异步发送。

A:利用Maven加载相关的jar报,当然也可以自己写MQ,用来生产者的消息

 
  
    javax.mail
    mail
  
  
    
       org.springframework
       spring-jms
       ${spring.version}
    
    
       org.apache.activemq
       activemq-all
       ${activemq.version}
    

jms交给spring进行管理


    
       
       
    

C、生产者配置



    

    

       

       

       

       
       
       
       
       
       
    
    
    
       
       
    

D、创建生产者消息转换器

publicclass InnerMessageConverter implements MessageConverter{

    @Override

    public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {

       MapMessage message = session.createMapMessage();
       @SuppressWarnings("all")

       Map map = (Map) object;
       message.setObject("title", map.get("title"));
       message.setObject("content", map.get("content"));
       message.setObject("to", map.get("to"));
       message.setObject("cc", map.get("cc"));

       message.setObject("type", map.get("type"));
       returnmessage;
    }

    @Override

    public Object fromMessage(Message message) throws JMSException, MessageConversionException {

       returnmessage;

    }

}

实际开发中通常根据消息类型的不同,选择不同类型的消息模板发送给消费者

E、消费者配置,监听器配置:



    

       

       

    

   

    

    

       

       

    

 

    

    

       

       

       

       

       

       

       

       

       

    

   



    

       

       

       

       

       

    

消费者实现MessageListener接口

   publicvoid processMessage(MapMessage message) throws Exception {

       //根据消息类型来判断使用具体的发送消息类

       IMessageSender sender = this.factory.getMessageSender(message.getString(MessageConstant.MessageType));

       if (null == sender) {

           thrownew RuntimeException("Not Support");
       }
       try {

           sender.sendMessage(message);

       } catch (Exception ex) {
           log.error(ex);
           thrownew RuntimeException("Not Support");

       }

你可能感兴趣的:(技术)