package com.study.gulimall.order.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
@Configuration
@Slf4j
public class MyMqConfig {
// 手动触发ConnectionListener 便可解决这个问题
@Bean
ApplicationRunner runner(ConnectionFactory cf) {
log.info("执行成功");
return args -> cf.createConnection().close();
}
/**
* 延时队列
*
* @return
*/
@Bean
public Queue orderDelayQueue() {
// 死信队列设置参数
Map<String, Object> params = new HashMap<>();
params.put("x-dead-letter-exchange", "order.event.exchange");
params.put("x-dead-letter-routing-key", "order.release.queue");
params.put("x-message-ttl", 60000);
// 创建queue
Queue queue = new Queue("order.delay.queue", true, false, false, params);
log.info("order.delay.queue 创建成功");
return queue;
}
/**
* 正式队列
*
* @return
*/
@Bean
public Queue orderReleaseQueue() {
// 创建queue
Queue queue = new Queue("order.release.queue", true, false, false);
log.info("order.release.queue 创建成功");
return queue;
}
/**
* 交换机
*
* @return
*/
@Bean
public Exchange orderEventExchange() {
// 创建exchange Direct
Exchange exchange = new DirectExchange("order.event.exchange", true, false);
log.info("order.event.exchange 创建成功");
return exchange;
}
@Bean
public Binding createOrderBinding() {
// String destination, 要绑定的名称可以是队列可以是exchage
// DestinationType destinationType, 枚举类 可以选择是什么类型
// String exchange, 和哪个交换机进行绑定 写交换机的名称
// String routingKey, 路由键
// Map<String, Object> arguments 额外要传递的参数
Binding binding = new Binding("order.delay.queue", Binding.DestinationType.QUEUE, "order.event.exchange", "order.create.order", null);
log.info("delay Binding 绑定成功");
return binding;
}
@Bean
public Binding releaseOrderBinding() {
// String destination, 要绑定的名称可以是队列可以是exchage
// DestinationType destinationType, 枚举类 可以选择是什么类型
// String exchange, 和哪个交换机进行绑定 写交换机的名称
// String routingKey, 路由键
// Map<String, Object> arguments 额外要传递的参数
Binding binding = new Binding("order.release.queue", Binding.DestinationType.QUEUE, "order.event.exchange", "order.release.order", null);
log.info("release Binding 绑定成功");
return binding;
}
}
SpingBoot 集成RabbitMQ使用@Bean 注解无法在项目启动时在MQ服务器端创建队列
最新推荐文章于 2024-04-22 10:08:52 发布