Little_xu 2022-06-15 14:56 采纳率: 16.7%
浏览 49
已结题

springboot整合RabbitMQ3.6.3版本优先队列 队列没有起作用

springboot整合RabbitMQ3.6.3版本优先队列 队列没有起作用

 问题相关代码
先创建交换机以及队列等

@Configuration
public class priorityConfig {
    //创建优先级队列等
    //交换机
    public static final String PRIORITY_EXCHANGE_NAME ="priority.exchange";
    //队列
    public static final String PRIORITY_QUEUE_NAME ="priority.queue";
    //信道
    public static final String PRIORITY_ROTING_KEY_NAME ="k1";

    //创建交换机
    @Bean
    public DirectExchange PRIORITYEXCHANGENAME(){
        return  new DirectExchange(PRIORITY_EXCHANGE_NAME);
    }
    //创建队列
    @Bean
    public Queue PRIORITYQUEUEENAME(){
//        return QueueBuilder.durable(PRIORITY_QUEUE_NAME).maxPriority(10).build();
        HashMap<String, Object> map = new HashMap<>();
        map.put("x-max-priority",10);
        return QueueBuilder.durable(PRIORITY_QUEUE_NAME).withArguments(map).build();
    }
    //创建交换机
    @Bean
    public Binding Binding(@Qualifier("PRIORITYEXCHANGENAME") DirectExchange exchange,@Qualifier("PRIORITYQUEUEENAME") Queue queue){
        return BindingBuilder.bind(queue).to(exchange).with(PRIORITY_ROTING_KEY_NAME);
    }
}

然后 编写 消息 生产者以及消费者
生产者

@RestController
@Slf4j
public class prioritycontroller {
    //交换机
    public static final String PRIORITY_EXCHANGE_NAME ="priority.exchange";
    //队列
    public static final String PRIORITY_QUEUE_NAME ="priority.queue";
    //信道
    public static final String PRIORITY_ROTING_KEY_NAME ="k1";
    @Autowired
    RabbitTemplate rabbitTemplate;

    @GetMapping("/kk")
    public void test() {
        for (int i = 0; i < 10; i++) {
            if (i == 5) {
                //1.创建消息属性
                MessageProperties messageProperties = new MessageProperties();
                //2.设置优先级
                messageProperties.setPriority(9);
                //3.创建消息对象
                Message message = new Message(("sendMessage..."+i).getBytes(),messageProperties);
                //4.发送消息
                rabbitTemplate.convertAndSend(PRIORITY_EXCHANGE_NAME,PRIORITY_ROTING_KEY_NAME,message);
            } else {
                //1.创建消息属性
                MessageProperties messageProperties = new MessageProperties();
                //2.设置优先级
                messageProperties.setPriority(1);
                //3.创建消息对象
                Message message = new Message(("sendMessage..."+i).getBytes(),messageProperties);
                rabbitTemplate.convertAndSend(PRIORITY_EXCHANGE_NAME, PRIORITY_ROTING_KEY_NAME, message );
            }
        }
    }
}
//消费者
@Component
@Slf4j
public class Consumer {
    @RabbitListener(queues = "priority.queue")
    public void receiveConfirmMessages(Message message) {
        log.info("收到了消息为:" + new String(message.getBody()));
    }
}

我先是注销这个消费者模拟一个阻塞状态 消息全部在 队列中 ,生产者发送消息 到队列 我看图形化界面也是 排好序了的 也就是说 第五条消息是在第一位

img

事实证明我是对的图形化界面 第五条消息是在第一 然后 启用消费者 发现 打印出来的消息 不是第一条 是其他消息条数

img

尝试过其他博主的方法 没有成功

  • 写回答

1条回答 默认 最新

  • 皮蛋不吃粥 2022-06-15 16:15
    关注

    消费者手动签收,再重新发送消息试一次

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月24日
  • 已采纳回答 6月16日
  • 创建了问题 6月15日

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧