RabbitMq
信息收集关闭禁用:
#进入容器后,cd到以下路径
cd /etc/rabbitmq/conf.d/
#修改 management_agent.disable_metrics_collector = false
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
插件地址: https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases
放到rabbitmq插件目录
开启插件: rabbitmq-plugins enable rabbitmq_delayed_message_exchange //不带版本号
package com.finnlee.config;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
/**
* @author finnlee
* @date 2022/8/25 22:46
*/
@Configuration
public class RabbitConfig {
//普通交换机
public static final String EXCHANGE_NAME1 = "exA";
//死信交换机
public static final String EXCHANGE_NAME2 = "exB";
//普通队列
public static final String QUEUE_NAME1 = "queueA";
//普通队列
public static final String QUEUE_NAME2 = "queueB";
//死信队列
public static final String QUEUE_NAME3 = "queueC";
//延时队列
public static final String QUEUE_NAME4 = "queueD";
//定义交换机
public static final String EXCHANGE_NAME3 = "exC";
//队列名称
public static final String QUEUE_NAME5 = "queueE";
//定义一个普通交换机
@Bean("exA")
public Exchange exA(){
return new DirectExchange(EXCHANGE_NAME1);
}
//定义一个死信交换机
@Bean("exB")
public Exchange exB(){
return new DirectExchange(EXCHANGE_NAME2);
}
//定义交换机
@Bean("exC")
public CustomExchange exC(){
Map<String ,Object> argument = new HashMap<>();
argument.put("x-delayed-type","direct");
return new CustomExchange(EXCHANGE_NAME3,"x-delayed-message",true,false,argument);
}
//普通队列
@Bean("queueA")
public Queue queueA(){
Map<String,Object> argument = new HashMap<>();
argument.put("x-dead-letter-exchange",EXCHANGE_NAME2);
argument.put("x-dead-letter-routing-key","XC");
argument.put("x-message-ttl",10000);
return QueueBuilder.durable(QUEUE_NAME1).withArguments(argument).build();
}
//普通队列
@Bean("queueB")
public Queue queueB(){
Map<String,Object> argument = new HashMap<>();
argument.put("x-dead-letter-exchange",EXCHANGE_NAME2);
argument.put("x-dead-letter-routing-key","XC");
argument.put("x-message-ttl",40000);
return QueueBuilder.durable(QUEUE_NAME2).withArguments(argument).build();
}
//延时队列
@Bean("queueD")
public Queue queueD(){
Map<String,Object> argument = new HashMap<>();
argument.put("x-dead-letter-exchange",EXCHANGE_NAME2);
argument.put("x-dead-letter-routing-key","XC");
return QueueBuilder.durable(QUEUE_NAME4).withArguments(argument).build();
}
//定义队列
@Bean("queueE")
public Queue queueE(){
return QueueBuilder.durable(QUEUE_NAME5).build();//QueueBuilder.durable(QUEUE_NAME1).build();
}
//绑定
@Bean
public Binding queueaBindExa(@Qualifier("queueA") Queue queueA,
@Qualifier("exA") DirectExchange exA){
return BindingBuilder.bind(queueA).to(exA).with("XA");
}
//绑定
@Bean
public Binding queuecBindExa(@Qualifier("queueB") Queue queueB,
@Qualifier("exA") DirectExchange exA){
return BindingBuilder.bind(queueB).to(exA).with("XB");
}
//绑定
@Bean
public Binding queuedBindExa(@Qualifier("queueD") Queue queueD,
@Qualifier("exA") DirectExchange exA){
return BindingBuilder.bind(queueD).to(exA).with("XD");
}
//死信队列
@Bean("queueC")
public Queue queueC(){
return new Queue(QUEUE_NAME3);
}
//绑定
@Bean
public Binding queuecBindExb(@Qualifier("queueC") Queue queueC,
@Qualifier("exB") DirectExchange exB){
return BindingBuilder.bind(queueC).to(exB).with("XC");
}
//绑定
@Bean
public Binding queueeBindExc(@Qualifier("queueE") Queue queueE,
@Qualifier("exC") CustomExchange exC) {
return BindingBuilder.bind(queueE).to(exC).with("LD").noargs();
}
}
消费端
@RabbitListener(queues = "queueE")
public void reviceMsgD(Message message, Channel channel) throws UnsupportedEncodingException {
String msg = new String(message.getBody(),"UTF-8");
log.info("插件队列接收时间:{} ,接收到{} 秒的信息",new Date().toString(),msg);
}
生产端
@GetMapping("/sendMsg/delayez/{ttl}")
public void sendMsgDelayez(@PathVariable("ttl") Integer ttl){
log.info("当前时间:{} ,发送一条{} 秒的消息",new Date().toString(),ttl);
rabbitTemplate.convertAndSend("exC","LD"," 消息来自 delayez为 "+ttl+" 的队列 ", message ->{
message.getMessageProperties().setDelay(ttl);
return message;
});
}

浙公网安备 33010602011771号