前言

(防止自己以后再踩坑,这里记录一下)

这个异常是我在设置队列过期时间遇到的,搞了半天也查找了很多的资料大部分都是2种解决方案:

1、如果队列设置的是客户端是自动创建的,直接删除队列。

2、如果客户端没有配置自动创建队列的话,手动去MQ客户端创建队列,并且设置对应的TTL值。

异常以及解决方案

上面2种方法我都试过了,还是没有解决我的这个问题。后来经过不停的试验终于搞定了。

客户端自动创建队列(现在一般都是这种啦),设置x-message-ttl队列过期时间,但是不指定type(我就这种情况)

配置:

@RabbitListener(bindings = {@QueueBinding(value = @Queue(value = "direct.info", //指定一下队列名,默认持久队列,不指定则为临时队列arguments = {@Argument(name = "x-dead-letter-exchange",value = "dlx.exchange"), //指定一下死信交换机@Argument(name = "x-dead-letter-routing-key",value = "deadKey"),  //指定死信交换机的路由key@Argument(name = "x-message-ttl",value = "3000") //指定队列的过期时间}),exchange = @Exchange(value = "directs"),//Exchang的默认类型就是direct,所以type可以不写key = {"info"})})private void receive(Message message, Channel channel) throws Exception{System.out.println(new String(message.getBody()));
}

启动客户端报错:

Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - invalid arg 'x-message-ttl' for queue 'direct.info' in vhost '/test': {unacceptable_type,longstr}, class-id=50, method-id=10)

注意红色字体标记出来的,大概意思就是不能接受的类型,但是这个longstr类型是个啥我也不知道,反Long和String都试一试呗,首先看看@Argument的参数

@Target({})
@Retention(RetentionPolicy.RUNTIME)
public @interface Argument {String name();String value() default "";String type() default "java.lang.String";
}

如果type不指定时他默认的就是Sting类型的,那就换成Long试试看,修改一下代码

@Argument(name = "x-message-ttl",value = "3000",type = "java.lang.Long") //指定队列的过期时间

结果出乎我的意料,异常消失了........................队列成功创建

总结:这种异常就是需要指定x-message-ttl的type类型,不能使用默认的String,改成Long类型就好使了,我也不晓得为啥要这么干,既然String类型不好使为啥要默认String呢?

其他情况

其他的意外这里做个笔记

在mq客户端创建队列并且指定x-message-ttl时,类型需要选择Number,不能选择String,如果选择String会提示报错

当你选择Number并且成功创建了队列,但是如果@Argument(name = "x-message-ttl",value = "3000")这样写,不指定type类型而使用默认的话,会报错:

Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'x-message-ttl' for queue 'direct.info' in vhost '/test': received '3000' but current is '3000', class-id=50, method-id=10)

我当时看到这个异常是一脸懵逼呀,MQ客户端设置的x-message-ttl明明是3000,@Argument(name = "x-message-ttl",value = "3000")设置的也是3000,为什么会报出这么个异常呢?归根结底还是需要在设置x-message-ttl时必须要指定一下type为java.lang.Long(默认的String都不行)

RabbitMQ异常之reply-code=406, reply-text=PRECONDITION_FAILED - invalid arg ‘x-message-ttl‘ for queue ..相关推荐

  1. ftp报错Could not parse response code. Server Reply ssh

    问题描述 使用commons-net操作FTP,当ftpClient.connect(host, port)报下面这个异常. org.apache.commons.net.MalformedServe ...

  2. 【报错】InternalExceptionException got error code in reply:34

    InternalExceptionException got error code in reply:34 原因是我使用了long类型来获取时间的毫秒数,getTime();结果超出了存储范围:Num ...

  3. RabbitMQ 异常与任务分发

    RabbitMQ 异常与任务分发 异常情况处理 上篇最后提到了这个问题, consumer异常退出.queue出错.甚至rabbitMQ崩溃.因为它们都是软件 ,软件都会有bug,这是无法避免的.所以 ...

  4. rabbitmq系列问题解决:406, “PRECONDITION_FAILED - inequivalent arg ‘durable‘

    rabbitmq系列问题解决:406, "PRECONDITION_FAILED - inequivalent arg 'durable' 参考文章: (1)rabbitmq系列问题解决:4 ...

  5. Error Domain=NSCocoaErrorDomain Code=3840 JSON text did not start with array or object and option

    数据请求失败 报错   Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or ob ...

  6. iOS开发Post请求错误:Error Domain=NSCocoaErrorDomain Code=3840 JSON text did not start with array or ...

    由于最近忙着开发项目,好几天没来写博客了.我把最近遇到的一个小bug来和大家分享一下. 最近iOS开发中,客户端需要使用http POST去进行请求服务器.需要发送的是XML格式的,当然接收的也是XM ...

  7. 链接KAFKA异常:Authentication failed during authentication due to invalid credentials with SASL mechanism

    使用带kerberos 认证的Kafka客户端链接kafka 创建topic 出现如下异常:Authentication failed during authentication due to inv ...

  8. npm ERR! code EINVAL npm ERR! EINVAL: invalid argument, read

    一般出现下面这个报错信息,就说明用错了工具了. npm ERR! code EINVAL npm ERR! EINVAL: invalid argument, read 可以尝试一下 yarn yar ...

  9. 关于Java连接Xftp的问题:Could not parse response code. Server Reply: SSH-2.0-OpenSSH 异常

    ftp的服务器有两种连接的协议,两种协议所使用的连接的工具类是不同的 ChannelSftp 和 FTPClient 的一些使用中区别: 上传文件 ChannelSftp.put(FileInputS ...

最新文章

  1. 网站信息统计的简单实现过程
  2. 网络丢包现象分析处理指导书5
  3. Android深入浅出系列之实例应用—简单的手指拖动图片,图片滑来滑去显示应用Gallery和BaseAdapter以及ImageView的使用...
  4. mysql 8.0免安装配置_Mysql8.0免安装包配置方法
  5. mybatis多对一处理两种处理方式
  6. influxdb介绍,安装,使用等(转载:http://www.jianshu.com/p/d2935e99006e)
  7. 68-Flutter中极光推送的使用
  8. c++笔试必考内容:const使用详解
  9. 访问艺术馆(codevs 1163)树形DP
  10. matlab程序的m语言,M语言GMSK程序求教
  11. SAP QM 特性导出及定性定量
  12. 斑马网络招聘汽车安全软件工程师
  13. C盘系统文件提示损坏怎么办?系统文件损坏怎么修复
  14. word2016 脚注问题总结
  15. vim/gvim 主题配色方案下载 安装修改配置
  16. ssb的有效性最好_在AM、DSB、SSB、FM系统中,有效性最好的是AM
  17. 那些让人动容的美食文案
  18. Camels【DP】
  19. 名人彩票Android客户端,名人彩票线路登录
  20. java 绘制长方形_Java基础之在窗口中绘图——绘制直线和矩形(Sketcher 2 drawing lines and rectangles)...

热门文章

  1. 炼狱与逐光——我的十杰博客获奖感言
  2. linux下mv命令参数详解,linux下的mv命令使用详解
  3. mysql获取中文拼音_mysql获取汉字拼音
  4. python里的map是什么意思_python中的map是什么意思
  5. KMP算法: Oulipo
  6. 示波器表笔旁边的夹子是什么_示波器探头的详细使用
  7. python彩色蟒蛇绘制方向_Python绘制彩色蟒蛇
  8. 1968. 奶牛赛跑
  9. 听力 JAVA_【VOA英语听力】 US Restarts Restrictions on Iran
  10. 双显卡只用独显好吗_双显卡如何切换到独立显卡?双显卡只用独显的方法