当前位置: 首页 > 知识库问答 >
问题:

Spring-amqp两个具有不同TTL的队列

漆雕兴平
2023-03-14

在我们的应用程序中,我们使用RabbitMQ和spring-amqp(1.4.3.发行版)。我们那里排了两个队。它们都配置了TTL(60000和100000)。当我们启动应用程序时,它会给出以下错误:

[pool-4-thread-1]错误org.springFramework.amqp.rabbit.connection.cachingConnectionFactory-通道关闭:通道错误;协议方法:#method(reply-code=406,reply-text=precondition_failed-vhost“/”中队列“queue1”的不等价参数“x-message-ttl”:已接收“60000”但当前为“100000”,class-id=50,method-id=10)

然后在尝试向队列发送消息时引发异常:

[http-nio-8080-exec-8]错误[P181786EJG755SN8I3S74584216UV1]未收到答复-可能模板超时?RemoteProxyFailureException:没有收到回复--可能是模板超时?在org.springframework.amqp.remoting.client.amqpclientinterceptor.invoke(amqpclientinterceptor.java:60)在org.springframework.aop.framework.reflectiveMethodInvocation.proceed(reflectiveMethodInvocation.java:179)在org.springframework.aop.framework.jdkdynamicaopproxy.invoke(jdkdynamicaopproxy.java:207)在com.sun.proxy.$proxy83.getUserByID(未知源)

在互联网上搜索得到的结果如下:

http://forum.spring.io/forum/spring-projects/integration/amqp/124865-unsexted-behavior-with-rabbit-admin特别是这个bug:https://jira.spring.io/browse/amqp-266

在我们发现错误之后,我们将两个队列的TTL值更改为60000,并且不再显示错误。并且应用程序运行良好。所以,看来TTL还是有一个bug。

共有1个答案

茹正祥
2023-03-14

我已经发现了问题,它与错误的配置有关。因此,要解决此问题:

  1. 检查Rabbit-Server中声明队列在spring-configurations中具有相同的参数。好消息是从rabbit中完全删除队列并启动应用程序
  2. 在应用程序中,可以在几个位置声明队列。检查它们是否都有相同的参数。如果它们具有不同参数,可能会导致问题(我的情况就是这样)。
 类似资料:
  • 我最近开始学习Spring和spring-amqp,所以这个问题可能看起来很基本,所以请原谅我。 null 或者有一种方法可以Spring加载所有我的队列配置类,然后只使用如下所示的对象: 那么,如何在不执行每次的情况下获取确切队列的amqpTemplate呢? 每次请求到达我的服务时都做新的AnnotationConfigApplicationContext有什么害处?[我想为每个请求创建一个新

  • 就像“休斯顿我们这里有一个问题”,在第一次尝试处理事件失败后,我需要安排/延迟消息5分钟。我已经在这个场景中实现了死信交换。 失败的消息会路由到DLX-->Retry队列,并在TTL 5分钟后返回工作队列进行另一次尝试。 下面是我正在使用的配置: producer.java: consumer.java:

  • 我是spring amqp的新手,我想创建两个行为不同的听众。问题是,我在编译时不知道队列名称,因此无法使用此解决方案。 我想做的事情是:从“sidechannel”队列中读取(然后删除)第一条消息,它应该是这样的{“queues”:[“queue1”,“queue2”]}。 现在从queue1和queue2读取(然后删除)第一条消息。之后,转至步骤1,阅读侧频道的第一条消息 正如您在下面的代码中

  • 我有一个Spring Boot应用程序,希望从多个AWS SQS队列接收消息。这些队列都有自己的凭据(遗憾的是,我对此无能为力)。这些凭据都不能访问其他队列之一,它们都仅限于一个队列。 因为只有一个队列和凭证,所以很简单。我只需要提供作为AWSCredentialsProvider的凭据,并用启用SQS注释我的方法 但我不知道如何使用多个凭据来执行此操作。 SqsListener注释无法提供凭据、

  • 问题内容: 我有两个表(表A和表B)。 它们具有不同的列数-假设表A具有更多列。 如何合并这两个表,并为表B没有的列获取空值? 问题答案: 为具有较少列的表添加额外的列作为null

  • 问题内容: 我正在使用基于SDK演示示例中EfficientAdapter示例的BaseAdapter扩展版本。 我的数据基本上是一个对象(),其中包含一个,其中包含实际的地点列表,可通过访问。此ArrayList数据按范围排序,由一些特殊项目(分隔符)组成,没有数据,但标志设置为。 现在,每当我得到一个作为分隔符的数据对象时,它都会返回并根据当前数据对象是由真实数据组成还是仅仅是分隔符虚拟物来使