我需要有关gcp pub / sus的问题的帮助。我有一个过程,它向pubsub发送带有过滤器的100条消息,另一个应用程序(在春季启动中)接收这些消息。当Spring Boot应用程序从pubsub接收消息(不是拉)时,处理100条消息,但是进入该进程,接收更多消息,不同的时间接收不同数量的消息,任何时候接收120条消息,另外140条消息,其他200条消息。我没有找到任何解决方案,这是我的代码:
@Bean
@ServiceActivator(inputChannel = "pubsubInputChannel")
public MessageHandler messageReceiver() {
return message -> {
System.out.println("Message arrived! Payload: " + new String((byte[]) message.getPayload()));
//other process of app (call other api)
AckReplyConsumer consumer = (AckReplyConsumer) message.getHeaders().get(GcpPubSubHeaders.ACKNOWLEDGEMENT);
consumer.ack();
};
}
请帮助我!
答案 0 :(得分:1)
由于不同的原因,在Google Cloud Pub / Sub中可能会出现重复消息。要记住的一件事是,Cloud Pub / Sub提供了至少一次的交付,这意味着一定数量的重复项始终是可能的,因此您的应用程序必须对它们具有弹性。不过,很多重复确实确实有点高。通常,由于以下原因,通常会发生重复:
<div class="msg" num="1" name="923103870">
。此过程需要多长时间?如果超过确认消息的截止日期,则将重新发送该消息。请记住,如果此其他过程要求为所有消息都获取锁,则可能有争用问题,因为试图同时获取这些锁的请求过多,从而导致处理延迟。默认情况下,邮件的确认截止时间为十秒。使用Java客户端库时,最后期限由maxAckExtensionPeriod自动延长,默认为一小时。也可以在DefaultSubscriberFactory中为Spring设置此属性。//other process of app (call other api)
的调用,或者发生了死锁,导致该行代码无法到达,则该消息将重新发送。