activeMQ

activeMQ

queque队列:

队列模式

生成者生成一条消息,当前没有消费者,会把这条消息保存,一旦有了消费者,就可以直接消费消息.

生产者产生了一条消息,当前有多个消费者,只有一个消费者可以获得到消息,有一个原则,先来先得.0

topic话题:

发布订阅模式

生产者生产了一条消息,如果当前没有消费者,这条消息就会丢失.

生产者生产了一条消息,当前所有监听消息的消费者,都可以或得到消息.

案例发送短信:

发送短信之前的步骤:

*将手机号存入客户对象
*生成随机的短信验证码
*将短信验证码保存到session中
*编辑短信内容
*调用sms服务器发送短息

//调用sms服务器发送短息
String result = SmsUtils.sendSmsByHTTP(model.getTelephone(), text);
//String result = "000/xxx";
//判断短信是否发送成功
if (result.startsWith("000")) {
    //成功
    return NONE;
}else {
    //失败
    throw new RuntimeException("短信发送失败,信息码:"+result);
}

Spring整合MQ之后将不在调用sms服务器发送短信, 而是调用MQ服务来发送一条消息,将之前的调用sms服务放到了消费者执行:

//调用MQ服务,发送一条消息
jmsTemplate.send("",new MessageCreator() {
    @Override
    public Message createMessage(Session session) throws JMSException {
        // TODO Auto-generated method stub
        MapMessage mapMessage = session.createMapMessage();
        //获得用户电话
         mapMessage.setString("telephone",                 model.getTelephone());
        //获得要发送的短信内容
        mapMessage.setString("text", text);
        return mapMessage;
    }
});
return NONE;

消费者要实现MessageListener,它里面有一个onMessage的方法,该方法就是要获取到MQ里面的信息并且调用第三方短信平台的借口发短信

package cn.itcast.bos.mq;

import java.io.UnsupportedEncodingException;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
import org.springframework.stereotype.Service;
import cn.itcast.bos.utils.SmsUtils;
@Service("smsConsumer")
public class SmsConsumer implements MessageListener {


    @Override
    public void onMessage(Message message) {
        // TODO Auto-generated method stub
        MapMessage mapMessage = (MapMessage) message;
        //调用sms服务器发送短息
        String result;
        try {
            result = SmsUtils.sendSmsByHTTP(mapMessage.getString("telephone"), mapMessage.getString("text"));
            //String result = "000/xxx";
            //判断短信是否发送成功
            if (result.startsWith("000")) {
                //成功

            }else {
                //失败
                throw new RuntimeException("短信发送失败,信息码:"+result);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值