java SSM整合rabbitMQ

今天踩着坑把rabbit搭建完成,融入SSM项目,这里记录一下,亲测OK
首先肯定是pom依赖啦,直接贴代码


		
			org.springframework.amqp
			spring-rabbit
			1.3.6.RELEASE
			
				
					*
					*
				
			
		
		
			com.rabbitmq
			amqp-client
			5.2.0
		
		
			org.springframework.amqp
			spring-amqp
			1.7.5.RELEASE
			compile
		
		
			org.springframework.retry
			spring-retry
			1.2.2.RELEASE
		

之前和我项目中的jar有个冲突,但是头疼的是没有找到具体是哪个jar冲突,所以很尴尬,先排除*
接下来就是我们的spring的配置文件,需要引入一下我们的生产者和消费者配置,通常叫application.xml

	
	

接下来就是配置我们的生产者



    
    

    

    
    
    
    
    

    
    
    
    
        
            
        
    

    




其他${}配置的就是你的rabbit设置的配置文件,如果你真的很小白,那么网上搜一下都有,不在此过多叙述。。。
可以看到有个key=“q_plm7020”,这个玩意儿后面生产者代码要用到,指定为生产到具体的队列中
接下来是我们的生产者代码

package com.zdmoney.credit.framework.mq;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @Author: zhangjiachen
 * @Date: 2018/10/29 16:11
 * @Description: 生产者test
 */
@Service
public class ProducterTest {
    private static Logger logger = LoggerFactory.getLogger(ProducterTest.class);

    @Resource
    private RabbitTemplate rabbitTemplate;

    public void sendMessage(String message) {
        logger.info("to send message:{}", message);
        rabbitTemplate.convertAndSend("q_plm7020", message);
    }

}

可以看到代码中的rabbitTemplate.convertAndSend(“q_plm7020”, message);里面的q_plm7020是我们生产者xml中配置的那个对应的字段,指定为生产到这个队列中
接下来是消费者的xml配置,代码如下:




    
    

    

    
    
    
    
    

    
    
    
    
        
            
        
    

    

    
        
    



然后直接是我们的消费者java代码“:

package com.zdmoney.credit.framework.mq;

import com.rabbitmq.client.Channel;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.ChannelAwareMessageListener;
import org.springframework.stereotype.Service;

/**
 * @Author: zhangjiachen
 * @Date: 2018/10/29 16:05
 * @Description: 消费者test
 */
@Service
public class ConsumerTest implements ChannelAwareMessageListener {
    private static Logger logger = LoggerFactory.getLogger(ConsumerTest.class);

    @Override
    public void onMessage(Message message, Channel channel) throws Exception {
        try {
            String jsonMsg = new String(message.getBody());
            if (StringUtils.isBlank(jsonMsg)) {
                logger.warn("MQ接收到消息为空!");
                return;
            }
            logger.info("收到消息为:" + jsonMsg);
        } catch (Exception e) {
            logger.error("MQ消息处理异常!", e);
        } finally {
            //告诉rabbit消费成功
            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
        }
    }
}

这里需要注意一下,监听的类需要在消费的xml中配置对应
以上就是生产消费的所有配置,我没有写单元测试或者main跑,因为这样可能不是太直观贴近实际开发,我之前看网上的demo也感觉不带劲,然后自己写个controller爽一把吧
直接撸出来controller代码

package com.zdmoney.credit.framework.controller;

import com.zdmoney.credit.framework.mq.ProducterTest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author: zhangjiachen
 * @Date: 2018/10/29 16:24
 * @Description: 测试MQ地址
 */
@RestController
@Slf4j
public class RabbitMqControllerTest {

    @Autowired
    private ProducterTest producter;

    @RequestMapping("/testMq")
    public String testMq() {
        log.info("请求OK,开始生产消息");
        producter.sendMessage("hello world!");
        log.info("请求OK,生产结束!");
        return "你的MQ发送成功!";
    }
}


然后我们去访问地址 http://项目/testMq
因为我本地有nginx做个层转发,我访问的是localhost就是我的项目
java SSM整合rabbitMQ_第1张图片
发现请求成功!
然后我们瞅瞅我们的日志输出,消费者是否消费掉
java SSM整合rabbitMQ_第2张图片

哈哈,到这里就全部结束了,希望能帮助到你们,这里面其实很简单一点都不难,恶心的是我同事坑了我一把。。。哈哈,当初再三确认他告诉我只用依赖一个jar,然后我居然当真了,后面越玩越不对劲,还有就是jar冲突的问题,因为不是我写的test项目,依赖乱七八糟,你们可以试一下pom依赖的时候不再去排除

好啦 哔哔到此结束,记录一下

你可能感兴趣的:(rabbitMQ)