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

Rabbitmq延迟消息传递无法使用Spring-Cloud-Stream

东方吕恭
2023-03-14

我试图在spring cloud stream中实现延迟消息(不使用rabbitmq插件),但它不起作用

我使用sping-boot实现了它,它工作得很好。下面是我在sping-boot中做的示例代码。

RabbitMQ中的延迟消息

我正试图在Spring的云流中做同样的事,但没有任何帮助。以下是属性。

输出通道-生产者

spring.cloud.stream.bindings.output.destination=temp-channel
spring.cloud.stream.bindings.output.group=temp-channel-group

输入通道-消费者

spring.cloud.stream.bindings.input.destination=temp-channel
spring.cloud.stream.bindings.input.group = temp-channel-group

spring.cloud.stream.bindings.input.consumer.exchange-type=direct
spring.cloud.stream.bindings.input.consumer.bind-queue=true
spring.cloud.stream.bindings.input.consumer.binding-routing- 
key=foo.bar.key
spring.cloud.stream.bindings.input.consumer.required-groups=final- 
channel-group-1
spring.cloud.stream.bindings.input.consumer.auto-bind-dlq=true
spring.cloud.stream.bindings.input.consumer.dlq-ttl=5000
spring.cloud.stream.bindings.input.consumer.dlq-dead-letter- 
exchange=final-channel-1
spring.cloud.stream.bindings.input.consumer.dlq-dead-letter-queue=final- 
channel-group-1
spring.cloud.stream.bindings.input.consumer.dlq-dead-routing- 
key=foo.bar.key

当用spring boot实现时,我看到消息在指定的时间内停留在临时队列中,然后移动到最终队列,我想用spring cloud stream实现同样的效果。如有任何意见,将不胜感激。

共有1个答案

平庆
2023-03-14

您不应该从临时通道消费。

关键是您将生成到具有TTL的队列,TTL过期并将消息路由到DLQ;然后您从DLQ消费。

消费者没有必需组,生产者有。

这就是你需要的:

生产商:

spring.cloud.stream.bindings.output.destination=temp-exchange
spring.cloud.stream.bindings.output.producer.required-groups=delayed-group
spring.cloud.stream.rabbit.bindings.output.producer.auto-bind-dlq=true
spring.cloud.stream.rabbit.bindings.output.producer.ttl=5000
spring.cloud.stream.rabbit.bindings.output.producer.dead-letter-exchange=final-dest
spring.cloud.stream.rabbit.bindings.output.producer.dead-letter-queue-name=final-dest.delayed-group

消费者:

spring.cloud.stream.bindings.input.destination=final-dest
spring.cloud.stream.bindings.input.group=delayed-group

这将创建这些队列:

temp-exchange.delayed-group

    x-dead-letter-exchange: final-dest
    x-dead-letter-routing-key:  temp-exchange.delayed-group
    x-message-ttl:  5000
    durable:    true

final-dest.delayed-group
 类似资料:
  • spring XML中的jmsTemplate定义: 有人对问题有什么建议吗/关于如何实现延迟消息传递的其他想法?谢了!

  • 此应用程序收到 但是,当不存在web套接字会话,并且JMSProducer将消息发送到QueueSenderSessionBean中的目标“jms/notificationQueue”时,消息会立即在NotificationEndpoint中使用。这不是我的意图。 我的目的是让队列保留消息,直到用户连接到NotificationEndpoint。如果用户没有连接到NotificationEndpo

  • 我的问题与Spring JMS(ActiveMQ)延迟传递消息非常相似,但与Spring boot自动配置程序更相关 我试图使用方法,但它抛出了一个 我试着从他那里找到合适的房产http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html但找不到broker sche

  • 我遇到了在多个请求下扩展应用程序的问题。 每个请求都向一个参与者发送一个ask,然后生成其他参与者。这是很好的,但是,在负载下(一次5个以上的询问),会花费大量的时间将消息传递给目标执行元。最初的设计是均匀地隔离请求,但这造成了一个瓶颈。示例: 在此图片中,是在查询计划解析程序之后发送的。但是,当执行元接收到此消息时有一个多秒的间隔。这只在负载(5+请求/秒)下才会出现。我最初以为这是一个饥饿的问

  • 我正在使用Spring Kafka1.0.3来消费kafka消息。Kafka的2个主题,每个主题有1个分区。在java代码中,有2@KafKalistener来消费每个主题消息。ConcurrentKafkaListenerContainerFactory的并发设置为1。但消息有时会延迟20秒以上。 有人知道为什么吗? 添加调试日志,并且延迟不是每次都可以,有时也可以:

  • 本文向大家介绍RabbitMQ 怎么实现延迟消息队列?相关面试题,主要包含被问及RabbitMQ 怎么实现延迟消息队列?时的应答技巧和注意事项,需要的朋友参考一下 延迟队列的实现有两种方式: 通过消息过期后进入死信交换器,再由交换器转发到延迟消费队列,实现延迟功能; 使用 RabbitMQ-delayed-message-exchange 插件实现延迟功能。