首页 > 其他分享 >mq延时队列

mq延时队列

时间:2023-03-08 14:11:06浏览次数:42  
标签:return NAME 队列 mq 延时 org import DLX public

import com.example.delayedmsg.config.QueueConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class DlxConsumer {
    private static final Logger logger = LoggerFactory.getLogger(DlxConsumer.class);

    @RabbitListener(queues = QueueConfig.DLX_QUEUE_NAME)
    public void handle(String msg) {
        logger.info("handleMsg,{}", msg);
    }
}
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class QueueConfig {
    public static final String JAVABOY_QUEUE_NAME = "javaboy_queue_name";
    public static final String JAVABOY_EXCHANGE_NAME = "javaboy_exchange_name";
    public static final String JAVABOY_ROUTING_KEY = "javaboy_routing_key";
    public static final String DLX_QUEUE_NAME = "dlx_queue_name";
    public static final String DLX_EXCHANGE_NAME = "dlx_exchange_name";
    public static final String DLX_ROUTING_KEY = "dlx_routing_key";

    /**
     * 死信队列
     * @return
     */
    @Bean
    Queue dlxQueue() {
        return new Queue(DLX_QUEUE_NAME, true, false, false);
    }

    /**
     * 死信交换机
     * @return
     */
    @Bean
    DirectExchange dlxExchange() {
        return new DirectExchange(DLX_EXCHANGE_NAME, true, false);
    }

    /**
     * 绑定死信队列和死信交换机
     * @return
     */
    @Bean
    Binding dlxBinding() {
        return BindingBuilder.bind(dlxQueue()).to(dlxExchange())
                .with(DLX_ROUTING_KEY);
    }

    /**
     * 普通消息队列
     * @return
     */
    @Bean
    Queue javaboyQueue() {
        Map<String, Object> args = new HashMap<>();
        //设置消息过期时间
        args.put("x-message-ttl", 1000*60*2);
        //设置死信交换机
        args.put("x-dead-letter-exchange", DLX_EXCHANGE_NAME);
        //设置死信 routing_key
        args.put("x-dead-letter-routing-key", DLX_ROUTING_KEY);
        return new Queue(JAVABOY_QUEUE_NAME, true, false, false, args);
    }

    /**
     * 普通交换机
     * @return
     */
    @Bean
    DirectExchange javaboyExchange() {
        return new DirectExchange(JAVABOY_EXCHANGE_NAME, true, false);
    }

    /**
     * 绑定普通队列和与之对应的交换机
     * @return
     */
    @Bean
    Binding javaboyBinding() {
        return BindingBuilder.bind(javaboyQueue())
                .to(javaboyExchange())
                .with(JAVABOY_ROUTING_KEY);
    }
}
spring.rabbitmq.host=localhost
spring.rabbitmq.password=guest
spring.rabbitmq.username=guest
#spring.rabbitmq.virtual-host=/
spring.rabbitmq.port=5672
@SpringBootTest
class DelayedMsgApplicationTests {

    @Autowired
    RabbitTemplate rabbitTemplate;

    @Test
    void contextLoads2() {
        System.out.println(new Date());
        rabbitTemplate.convertAndSend(QueueConfig.JAVABOY_EXCHANGE_NAME, QueueConfig.JAVABOY_ROUTING_KEY, "hello javaboy!");
    }
}

 

标签:return,NAME,队列,mq,延时,org,import,DLX,public
From: https://www.cnblogs.com/joyny/p/17191824.html

相关文章

  • 消息队列中间件的选型与比较
    消息队列是一种重要的分布式系统组件,可用于异步通信、削峰填谷、解耦系统、数据缓存等多个方面。在选择消息队列时,需要考虑诸多因素,包括性能、可靠性、可用性、扩展性......
  • springBoot集成mqtt
    springBoot集成mqtt目录springBoot集成mqtt简介下载启动springBoot集成mqtt结束简介EMQX是一款大规模可弹性伸缩的云原生分布式物联网MQTT消息服务器。作为全球最具扩......
  • RabbitMq
    消息安全发送策略?设置mandatory=true参数,添加监听事件设置备份交换机事务机制异步确认机制设置mandatory=tueexchange根据自身类型和消息routingKey无法匹配......
  • RabbitMQ
    RabbitMQ简介实现了AMQP(高级队列协议)Erlang是面向并发的编程语言,充分利用了CPU的性能,延迟特别低支持多种语言通讯:Java,Python...都有相应的API支持海量......
  • Docker启动RabbitMQ访问15672连接超时解决方法
    docker成功启动rabbitmq后访问15672端口报连接超时原因:rabbitmq默认web界面管理插件是关闭的,需要通过命令开启解决办法:1、查看rabbit的容器id:dockerps2、进入......
  • 【队列】LeetCode 1429. 第一个唯一数字
    题目链接1429.第一个唯一数字给定一系列整数,插入一个队列中,找出队列中第一个唯一整数。实现FirstUnique类:FirstUnique(int[]nums)用数组里的数字初始化队列。in......
  • RocketMQ高可用机制
    RocketMQ高可用机制集群部署模式1.单master模式2.多master模式配置配置文件broker.properties的brokerClusterName需要保持一致brokerId需要为0,0代表为0优缺点......
  • ActiveMQ
    转载: https://www.cnblogs.com/sam-uncle/p/10988930.html一、理论基础同RabbitMQ一样,ActiveMQ中也是有两种模式:点对点模式(PointtoPoint,简写为PTP)发布/订阅模式(P......
  • 基于GD32F407单片机与循环队列的BIT上报学习记录
    c文件staticuint8_trx_buf[MAX_485_RX_LEN]={0};staticuint8_trx_buf_data_cnt=DATA;staticuint8_trs485TXBuf[MAX_485_RX_LEN]={0};usart_device_tusart......
  • jeroMQ操作ZMQ实例
    ZMQ即zeroMQ,ZMQ并不像是一个传统意义上的消息队列服务器,事实上,它也根本不是一个服务器,它更像是一个底层的网络通讯库,在SocketAPI之上做了一层封装,将网络通讯、进程通讯和......