springboot+rabbitmq+死信队列,实际使用(完成了更新功能)

工作第一天,让我完成用rabbitmq完成对某个信息的修改功能,由于我是新人,太久没使用rabbitmq,所以我花费了 大量时间,同时遇到了些bug,我也会在中间分享,然后再分享下我的代码。

第一个最变态的bug,提示框那里会一直刷新,主要是下面一直会刷新很烦,不晓得报啥错,你可以暂停下。

这个咋解决的我也搞忘了,但是为了防止它一直在刷新,你可以try,catch下,这样你可以看到报错。好像是传输的参数有问题,这个我弄了半天,后面解决的。一种方法是序列化,但是带我的人不推荐我使用,使用了另外一种,发过去的还是string类型,不过是json字符串,然后把json字符串再转换为对象。

org.springframework.amqp.rabbit.support.ListenerExecutionFailedException: Failed to convert message

还有就只direct交换机,那里参数不要加上routingkey,不然不行,不晓得为啥子,直接给交换机即可。

例如

 rabbitTemplate.convertAndSend(RabbitDirectConfig.QUEUE_TASK_MES, JSONUtil.toJsonStr(vo));

绑定死信队列那里也遇上bug,明明没有问题,但是一直没绑定上,原来是要原本的队列删除掉,才可以绑定。

第一步

rabbitmqconfig,申明队列和交换机都在里面

package com.example.cloud.dataAcquisition.config;
import org.springframework.amqp.core.*;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitDirectConfig {
    public static final String DIRECTNAME = "zhw-direct";
    public static final String QUEUE_TASK_MES = "queue_task_mes";
    public static final String ROUTINGKEY = "direct";
    //死信
    public static final String DEAD_EXCHANGE = "dead_exchange";
    public static final String DEAD_QUEUE = "dead_queue";
    public static final String DEAD_ROUTE = "dead_route";

    //死信交换机
    @Bean
    public Exchange deadExchange() {
        return ExchangeBuilder.directExchange(DEAD_EXCHANGE).build();
    }
    //死信队列
    @Bean
    public Queue deadQueue() {
        return QueueBuilder.durable(DEAD_QUEUE).build();
    }
    //死信交换机绑定死信队列
    @Bean
    public Binding deadBinding(Exchange deadExchange,Queue deadQueue) {
        return BindingBuilder.bind(deadQueue).to(deadExchange).with(DEAD_ROUTE).noargs();
    }
    @Bean("queue_task_mes")
    public Queue queue(){
        return QueueBuilder.durable(QUEUE_TASK_MES).deadLetterExchange(DEAD_EXCHANGE).deadLetterRoutingKey(DEAD_ROUTE).build();
    }
    @Bean("zhw-direct")
    public DirectExchange directExchange(){
        return new DirectExchange(DIRECTNAME,true,false);
    }
    @Bean
    public Binding binding(@Qualifier("queue_task_mes") Queue queue, @Qualifier("zhw-direct") DirectExchange exchange){
        return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY);
    }
}

发送和接受我就不发了,那还是挺简单,这个config绝对没有问题,本人亲测,死信队列绑上了去的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值