队列达到最大长度代码实战

简介: 队列达到最大长度代码实战

生产者001


/**
 * 队列到达最大长度的情况
 */
public class Producer001 {
    private  static  final  String NORMAL_EXCHANGE="normal_exchange";
    public static void main(String[] args) throws  Exception{
        Channel channel = untils.getChannel();
        channel.exchangeDeclare(NORMAL_EXCHANGE, BuiltinExchangeType.DIRECT);
        //该消息用作队列的个数限制
        for(int i=0;i<10;i++)
        {
            String message="info"+i;
            channel.basicPublish(NORMAL_EXCHANGE,"zhangsan",null,message.getBytes(StandardCharsets.UTF_8));
            System.out.println("生产者发送消息"+message);
        }
    }
}


消费者001


/**
 * 队列最大长度的普通消费者
 */
public class Consumer001 {
        //普通交换机
        private  static  final  String NORMAL_EXCHANGE="normal_exchange";
        //死信交换机
        private  static  final  String DEAD_EXCHANGE="dead_exchange";
        public static void main(String[] args) throws  Exception{
            Channel channel = untils.getChannel();
            //声明死信交换机,类型为direct
            channel.exchangeDeclare(NORMAL_EXCHANGE, BuiltinExchangeType.DIRECT);
            channel.exchangeDeclare(DEAD_EXCHANGE,BuiltinExchangeType.DIRECT);
            //声明死信队列
            String deadQueue="dead_queue";
            channel.queueDeclare(deadQueue,false,false,false,null);
            //死信队列绑定交换和routingKey值
            channel.queueBind(deadQueue,DEAD_EXCHANGE,"lisi");
            //正常队列绑定死信队列
            Map<String,Object> params=new HashMap<>();
            //正常队列设置死信交换机,参数key是固定值
            params.put("x-dead-letter-exchange",DEAD_EXCHANGE);
            //正常队列设置死信routing-key,参数key是固定值
            params.put("x-dead-letter-routing-key", "lisi");
            //正常队列设置的最大限制长度
            params.put("x-max-length",6);
            System.out.println("等待接收消息....");
            String normalQueue="normal_queue";
            channel.queueDeclare(normalQueue,false,false,false,params);
            channel.queueBind(normalQueue,NORMAL_EXCHANGE,"zhangsan");
            DeliverCallback deliverCallback=(consumerTag, message) -> {
                String s = new String(message.getBody(), StandardCharsets.UTF_8);
                System.out.println("01接收到消息"+s);
            };
            channel.basicConsume(normalQueue,true,deliverCallback,consumerTag -> {});
        }
}


结果:


fa6b3e3b5b48454bbc49bf3d09d15f5e.png

相关文章
|
8月前
|
Go C++
【力扣】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
【2月更文挑战第18天】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
63 6
|
8月前
|
消息中间件 监控 Go
合并队列的例子
【5月更文挑战第14天】文中探讨了如何跨线程或机器合并两个有序任务队列, 利用队列有序性优化合并效率。任务队列用于工作单元调度,通过消息代理在客户端和工作进程间通信,实现高可用和可扩展系统。队列功能包括监控、调度、工作流程、资源保护、时间和速率限制以及组件定制。合并操作的时间复杂度在最好情况下为O(N),最坏情况为O(N²),其中N为较短队列的长度。
252 0
合并队列的例子
|
7月前
|
存储 算法
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
51 0
|
8月前
|
存储 索引 Python
leetcode-387:字符串中的第一个唯一字符(队列以及堆栈最简单的实现方式)
leetcode-387:字符串中的第一个唯一字符(队列以及堆栈最简单的实现方式)
59 1
|
算法 UED
【算法入门】设计模板队列|循环队列(上)
【算法入门】设计模板队列|循环队列
93 0
|
算法
【算法入门】设计模板队列|循环队列(下)
【算法入门】设计模板队列|循环队列
104 0
|
存储
大话数据结构--初始队列
大话数据结构--初始队列
89 0
|
算法 JavaScript 前端开发
日拱算法:用两个栈实现队列&包含min函数的栈
本篇带来【剑指offer】的两道初级算法题:冲~~
|
存储
数组模拟队列(测试样例,含源码分析)
数组模拟队列(测试样例,含源码分析)
128 0
数组模拟队列(测试样例,含源码分析)
|
存储
设计一个名为Queue的类用于存储整数。在栈中,元素以“后进先出”的方式获取。在队列中,元素以“先进先出”方法获取。
设计一个名为Queue的类用于存储整数。在栈中,元素以“后进先出”的方式获取。在队列中,元素以“先进先出”方法获取。
117 0