SSM整合RabbitMQ

1.添加pom依赖


      com.rabbitmq
      amqp-client
      4.0.0
    

    
      org.springframework.amqp
      spring-rabbit
      1.7.2.RELEASE
    

  

2.配置spring-rabbitmq.xml



    

    

    

    
        
        
        
        
    
    

    
    

    

  

    
    
    
        
    

    

  

在spring-dao.xml进行引入


        
            
                classpath:jdbc.properties
                classpath:redis.properties
                classpath:global.properties
            
        
        
    

  

3.编写MQProducer接口及其实现类(注意是在Service包下)

package com.shop.service;

import com.shop.rabbitmq.MQMessage;

/**
 * Created by Skye on 2018/7/7.
 */
public interface MQProducer {

    String MIAOSHA_QUEUE = "miaosha.queue";
    String QUEUE = "queue";
    String TOPIC_QUEUE1 = "topic.queue";


    /**
     * 发送消息到指定队列
     * @param msg
     */
    void sendMessage(MQMessage msg);
}

  

MQProducer实现类

package com.shop.service.serviceImpl;

import com.shop.cache.RedisUtil;
import com.shop.rabbitmq.MQMessage;
import com.shop.service.MQProducer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * Created by Skye on 2018/7/7.
 */
@Service
public class MQProducerImpl implements MQProducer {

    private static Logger log = LoggerFactory.getLogger(MQProducer.class);

    @Autowired
    AmqpTemplate amqpTemplate ;

    @Override
    public void sendMessage(MQMessage msg)
    {

        String mm = RedisUtil.beanToString(msg);
        log.info("send message:"+msg);
        //发送信息
        amqpTemplate.convertAndSend(MIAOSHA_QUEUE, mm);
    }
}

  

4.写消费者

package com.shop.rabbitmq;

import com.shop.bean.LocalUser;
import com.shop.bean.MiaoshaOrder;
import com.shop.bean.MiaoshaProduct;
import com.shop.cache.RedisUtil;
import com.shop.dto.ProductExecution;
import com.shop.service.MQProducer;
import com.shop.service.MiaoshaService;
import com.shop.service.OrderService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * Created by Skye on 2018/7/7.
 */
@Service
public class MQConsumer {

    @Autowired
    MiaoshaService miaoshaService;


    @Autowired
    OrderService orderService;

    private static Logger log = LoggerFactory.getLogger(MQConsumer.class);

    public void rmqProducerMessage(Object object){

        MQMessage MQMessage =(MQMessage) object;

        System.out.println(MQMessage.getExchange());
        System.out.println(MQMessage.getRouteKey());
        System.out.println(MQMessage.getParams().toString());
    }


    @RabbitListener(queues=MQProducer.MIAOSHA_QUEUE)
    public void receive(String message) {
        log.info("receive message:"+message);
        MQMessage mm  = RedisUtil.stringToBean(message, MQMessage.class);
        LocalUser localUser = mm.getUser();
        MiaoshaProduct miaoshaProduct = mm.getMiaoshaProduct();

        ProductExecution productExecution = miaoshaService.getMiaoshaProduct(miaoshaProduct);
        miaoshaProduct = productExecution.getMiaoshaProduct();
        int stock = miaoshaProduct.getMiaoshaStock();
        if(stock <= 0) {
            return;
        }

        //判断是否已经秒杀到了
        MiaoshaOrder order = orderService.getMiaoshaOrder(localUser, miaoshaProduct);
        if(order != null) {
            return;
        }
        //减库存 下订单 写入秒杀订单
        miaoshaService.doMiaosha(localUser, miaoshaProduct);
    }

}

  

MQMessage类

package com.shop.rabbitmq;

import com.shop.bean.LocalUser;
import com.shop.bean.MiaoshaProduct;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * Created by Skye on 2018/7/6.
 */
public class MQMessage implements Serializable {
    private static final long serialVersionUID = 1302562501680404088L;

    private LocalUser user;
    private MiaoshaProduct miaoshaProduct;
    public LocalUser getUser() {
        return user;
    }
    public void setUser(LocalUser user) {
        this.user = user;
    }
    public MiaoshaProduct getMiaoshaProduct() {
        return miaoshaProduct;
    }

    public void setMiaoshaProduct(MiaoshaProduct miaoshaProduct) {
        this.miaoshaProduct = miaoshaProduct;
    }

    private Class[] paramTypes;//参数类型
    private String exchange;//交换器

    private Object[] params;

    private String routeKey;//路由key

    public MQMessage(){}

    public MQMessage(String exchange, String routeKey, Object...params)
    {
        this.params=params;
        this.exchange=exchange;
        this.routeKey=routeKey;
    }

    @SuppressWarnings("rawtypes")
    public MQMessage(String exchange, String routeKey, String methodName, Object...params)
    {
        this.params=params;
        this.exchange=exchange;
        this.routeKey=routeKey;
        int len=params.length;
        Class[] clazzArray=new Class[len];
        for(int i=0;i[] getParamTypes() {
        return paramTypes;
    }

    public Object[] getParams() {
        return params;
    }
}

  

SSM整合rabbitMQ时报错org.springframework.beans.factory.NoSuchBeanDefinitionException

 

转载于:https://www.cnblogs.com/SkyeAngel/p/9283320.html

你可能感兴趣的:(大数据,java,数据库)