本篇主要记录Spring boot 集成Rabbitmq,分为两部分, 第一部分为创建普通消息队列, 第二部分为延时消息队列实现:
spring boot提供对mq消息队列支持amqp相关包,引入即可:
<!-- rabbit mq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
属性配置文件application.properties:
#rabbitmq
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=root
spring.rabbitmq.password=root
RabbitMq配置类,配置连接工厂以及操作对象:
@Configuration
@ConfigurationProperties(prefix = "spring.rabbitmq")
public class RabbitMQConfiguration {
private static Logger logger = Logger.getLogger(RabbitMQConfiguration.class);
private String host;
private int port;
private String username;
private String password;
// 链接信息
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host, port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
connectionFactory.setVirtualHost("/");
connectionFactory.setPublisherConfirms(true);
logger.info("Create ConnectionFactory bean ..");
return connectionFactory;
}
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory());
return template;
}
//省略getter setter
}
定义Service接口如下:
暂时不考虑延时队列,定义发送消息接口
/**
*
* @author victor
* @desc 消息队列服务接口
*/
public interface IMessageQueueService {
/**
* 发送消息到队列
* @param queue 队列名称
* @param message 消息内容
*/
public void send(String queueName,String message);
}
Service实现
package com.ks.server.service.impl.queue;
import org.springframework.amqp.AmqpException;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.base.common.codec.JSONUtils;
import com.ks.common.constant.MQConstant;
import com.ks.common.service.queue.IMessageQueueService;
import com.ks.modal.queue.DLXMessage;
/**
*
* @author victor
* @desc 消息队列服务接口实现
*/
@Service(&#