【发布时间】:2021-11-09 22:48:46
【问题描述】:
我是 GCP 发布/订阅的新手,并尝试重新发送未确认的消息 (ack/nack)。在 GCP 控制台仪表板的订阅中,我提到过:
在我的 java 代码中,我创建了一个订阅者
public Subscriber createSubscriber(String subscriptionId, MessageReceiver receiver) throws MessagingException {
Subscriber subscriber = null;
ProjectSubscriptionName subscriptionName = null;
String projectId = getProjectId();
if (Objects.isNull(projectId) || Objects.isNull(subscriptionId)) {
throw new MessagingException(MessagingErrorCodes.MIX90810
+ " Project Id/Subscription Id is null for subscriptionId = " + subscriptionId + " projectId= "
+ projectId, MessagingErrorCodes.MIX90810);
}
try {
subscriptionName = ProjectSubscriptionName.of(projectId, subscriptionId);
subscriber = Subscriber.newBuilder(subscriptionName, receiver).setExecutorProvider(getExecutorProvider()).build();
} catch (Exception e) {
throw new MessagingException(MessagingErrorCodes.MAX34540
+ " Error occurred while creating the subscriber for the subscriptionId = " + subscriptionId
+ "projectId " + projectId + "subscriptionName= " + subscriptionName,
MessagingErrorCodes.MAX34540, e);
}
enter code here
return subscriber;
}
我第一次收到关于我的 receiveMessage(PubsubMessage 消息,AckReplyConsumer 消费者) 的消息,但如果我没有确认消息,则不会再次收到消息。但是如果发送 nack 它会再次发送消息。
@Service
public class MyMessageReceiver implements MessageReceiver {
@Override
public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) {
System.out.println(message.getMessageId());
}
}
我是否需要提及其他配置以启用重试以防不确认消息?
【问题讨论】:
-
您的确认截止日期是 10 秒。
-
超时后结束,你又收到消息了吗?
-
我每隔 1 小时收到一次消息。正如在 Subscriber.java 中有
DEFAULT_MAX_ACK_EXTENSION_PERIOD= Duration.ofMinutes(60);来进行自定义重试时间。我必须在 setMaxAckExtensionPeriod(Duration maxAckExtensionPeriod) 函数中设置持续时间。 -
@BoristheSpider 无论如何我可以看到延长的时间在日志或仪表板中工作正常
标签: java google-cloud-platform spring-cloud-gcp