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

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 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵