rabbitmq集成spring的xml配置和java代码

RabbitMQ官方支持以下五种队列类型。

队列名称 队列模型 适用
简单队列
工作队列
发布/订阅模式
路由模式
主题模式

 

使用依赖:



    org.springframework.amqp
    spring-rabbit
    1.7.12.RELEASE

xml配置




    

    
    
    
    

    

    
    
    

    
    
        
            
                
            
        
    
    
    
    
    
        
    
    

    
    
    
    
    







config.properties配置:

#rabbitmq   rabbitmq.open-->Y/N
rabbitmq.open=Y
rabbit.mq.host=172.16.20.121
rabbit.mq.port=5672
rabbit.mq.username=fsl
rabbit.mq.password=fsl
rabbit.mq.queue=queue.portal.default

java代码--mq接收者--RabbitMqReceiver.java

import java.util.Map;

import com.fsl.lcp.mq.service.MqHandleService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;

/**
 * 〈rabbitmq的消费者〉.
 *
 * @author tanqian
 * @create 2019/1/2
 */
public class RabbitMqReceiver implements MessageListener {

    private Logger log = LoggerFactory.getLogger(RabbitMqReceiver.class);

    private Map serviceBeanMap;

    @Override
    public void onMessage(Message message) {

        try {
            String str = new String(message.getBody(), "utf-8");
            log.info(" receive body------->:" + str);
            //处理消息
            String type = "test";
            serviceBeanMap.get(type).handleMqData(message);

        } catch (Exception e) {
            e.printStackTrace();
            log.error("error:" + e.getMessage());
        }
    }

    public Map getServiceBeanMap() {
        return serviceBeanMap;
    }

    public void setServiceBeanMap(Map serviceBeanMap) {
        this.serviceBeanMap = serviceBeanMap;
    }


}

java代码--mq消息处理者公共接口类--MqHandleService.java

import org.springframework.amqp.core.Message;

/**
 * 处理mq消息的接口类.
 *
 * @author tanqian
 * @date 2019/01/11
 */
public interface MqHandleService {

    /**
     * 处理mq过来的数据.
     */
    void handleMqData(Message message);

}

java代码--mq消息处理者实现类--MdmDataHandleServiceImpl.java


import com.fsl.lcp.mq.service.MqHandleService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
 
/**
 * 处理mdm的mq消息的实现类.
 *
 * @author tanqian
 * @date 2019/01/07
 */
@Transactional(rollbackFor = Exception.class)
public class MdmDataHandleServiceImpl implements MqHandleService {
 
    private Logger log = LoggerFactory.getLogger(MdmDataHandleServiceImpl.class);
 
    @Override
    public void handleMqData(Message message) {
        try {
            //处理消息
            String str = new String(message.getBody(), "utf-8");
            log.info(" receive body------->:" + str);
        } catch (Exception e) {
            log.error("Exception------->:" + e.getMessage());
        }
    }
}

java代码--mq消息发送者类--RabbitMqProducer.java,其中rabbitMqTemplate可以直接通过注解获取

import java.io.IOException;

import com.hand.hap.core.components.ApplicationContextHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;

/**
 * rabbitmq消息的生产者.
 *
 * @author tanqian
 * @date 2019/01/11
 */
public class RabbitMqProducer {

    private Logger log = LoggerFactory.getLogger(RabbitMqProducer.class);

    private ApplicationContext beanFactory;

    @Value("${rabbitmq.open}")
    private String rabbitmqOpen;

    //    @Resource(name = "rabbitMqTemplate")
    private AmqpTemplate rabbitMqTemplate;

    public void sendMessage(String exchange, String routingKey, Object message) throws IOException {
        //初始化bean
        this.loadService();
        log.info("to send message:{}", message);
        rabbitMqTemplate.convertAndSend(exchange, routingKey, message);
    }

    /**
     * 加载注入的bean.
     */
    private void loadService() {
        if (null == beanFactory) {
            beanFactory = ApplicationContextHelper.getApplicationContext();
            if (null == beanFactory) {
                return;
            }
        }
        if (rabbitMqTemplate == null && rabbitmqOpen.equals("Y")) {
            rabbitMqTemplate = (AmqpTemplate) beanFactory.getBean("rabbitMqTemplate");
        }

    }
}

文档参考:

中文文档:http://rabbitmq.mr-ping.com/

官方文档:http://www.rabbitmq.com/getstarted.html

 

 

你可能感兴趣的:(java后端框架等技术)