【问题标题】:Spring Cloud GCP PubSub DLQ(死信队列)使用 Spring Integration
【发布时间】:2020-11-10 08:34:42
【问题描述】:

我目前正在使用以下方法集成 PubSub https://docs.spring.io/spring-cloud-gcp/docs/1.2.4.BUILD-SNAPSHOT/reference/html/#spring-integration

基本上我订阅了一个主题,我收到消息并用它做一些事情。

如果我的业务规则出现任何错误情况(例如因为 X、Y、Z 原因不接受消息),我想将其发送到 dlq。

我看到就在一个半月前,Google 推出了用于 PubSub 的 DLQ:https://cloud.google.com/pubsub/docs/dead-letter-topics

但我不确定将它与 spring 集成方法集成的正确方法应该是什么。

【问题讨论】:

    标签: java spring spring-integration google-cloud-pubsub spring-cloud-gcp


    【解决方案1】:

    内置的 DLQ 支持将自动运行 - 您只需打开 Dead Lettering(通过 Cloud Console 中的添加/编辑订阅屏幕),将“最大交付尝试次数”字段设置为尝试次数。在您的应用程序nack()s 发送此消息次数后,Cloud Pub/Sub 会将其重定向到您设置为 DLQ 的主题。

    内置支持非常适用于环境、可重试的消息传递失败原因。但是,在将消息发送到 DLQ 之前,它至少要重试 5 次。在业务规则验证的情况下,您可能更喜欢使用自定义主题和 Spring Integration 重定向来模拟 DLQ,因为在尝试 #1 失败后,消息不会突然变为有效,其余尝试 #2 - #5 是浪费资源。

    为了模仿在单个失败后重定向的 DLQ,您将创建一个新主题,我们称之为 validation-dlq,将其连接为 Spring 集成通道,对每条消息运行自定义验证检查,如果消息失败,ack()源订阅上的原始消息,并将消息发布到validation-dlq主题。

    【讨论】:

    • 太棒了。我认为在您所说的之后,很明显,向 DLQ 发送消息应该只在消息传递失败的可重试原因下发生。任何其他特定场景,应由主题处理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 2023-03-29
    相关资源
    最近更新 更多