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

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 数据库获取信息反馈出错,直接查询了ref字段并且还使用了User文档的_id而不是自己的
  • ¥15 将安全信息用到以下对象时发生以下错误:c:dumpstack.log.tmp 另一个程序正在使用此文件,因此无法访问
  • ¥15 速度位置规划实现精确定位的问题
  • ¥15 代码问题:df = pd.read_excel('c:\User\18343\Desktop\wpsdata.xlxs')路径读不到
  • ¥15 为什么视频算法现在全是动作识别?
  • ¥15 编写一段matlab代码
  • ¥15 用Python做岩石类别鉴定软件
  • ¥15 关于调取、提交更新数据库记录的问题
  • ¥15 之前删了盘从下vs2022遇见这个问题 搞了一整天了
  • ¥15 从Freecad中宏下载的DesignSPHysics,出现如下问题是什么原因导致的(语言-python)