rabbitmq安装可以参考如下博客:
https://www.jianshu.com/p/ed6a78c306da
https://www.cnblogs.com/sevck/p/9176747.html
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
添加yml配置
rabbitmq:
host: rabbitmq
username: admin
password: 123456
port: 5672
添加类配置
@Configuration
public class RabbitMqConfig {
public final static String DELAYED_QUEUE_NAME = "DELAYED_QUEUE_NAME";
public final static String EXCHANGE_NAME = "EXCHANGE_NAME";
public final static String DELAY_ORDER_ROUTING_KEY = "DELAY_ORDER_ROUTING_KEY";
@Bean
public Queue queue() {
return new Queue(DELAYED_QUEUE_NAME);
}
// 配置默认的交换机
@Bean
CustomExchange customExchange() {
Map<String, Object> args = new HashMap<>();
args.put("x-delayed-type", "direct");
//参数二为类型:必须是x-delayed-message
return new CustomExchange(EXCHANGE_NAME, "x-delayed-message", true, false, args);
}
// 绑定队列到交换器
@Bean
Binding binding() {
return BindingBuilder.bind(queue()).to(customExchange()).with(DELAY_ORDER_ROUTING_KEY).noargs();
}
}
发送工具类
@Slf4j
public class RabbitMqUtils {
// 1分钟
public static final int ORDER_TIME_OUT_TIME = 1000 * 60 ;
public static void senderDelayedOrderOutTradeNo(RabbitTemplate rabbitTemplate, String rabbitMqDelayedOrderVoStr) {
rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_NAME, RabbitMqConfig.DELAY_ORDER_ROUTING_KEY, rabbitMqDelayedOrderVoStr, message -> {
//1分钟超时
message.getMessageProperties().setHeader("x-delay", ORDER_TIME_OUT_TIME);
log.info("send message to rabbitmq: " + rabbitMqDelayedOrderVoStr);
return message;
});
}
}
消费消息
@Component
@Slf4j
public class DelayedAppointmentRecordReceiver {
@RabbitListener(queues = RabbitMqConfig.DELAYED_QUEUE_NAME)
@RabbitHandler
public void process(String rabbitMqDelayedOrderVoStr) {
// 监听
System.out.println("接收到的为:"+rabbitMqDelayedOrderVoStr);
}
}
启动类添加注解
@EnableRabbit