Spring 如果pubsub主题不可用,则引发未找到异常

Spring 如果pubsub主题不可用,则引发未找到异常,spring,publish-subscribe,google-cloud-pubsub,Spring,Publish Subscribe,Google Cloud Pubsub,我正在使用SpringBoot与pubsub主题进行交互 此连接的配置类如下所示: import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.gcp.pubsub.core.PubSubTemplate; import org.springframework.cloud.gcp.pubsub.core.publisher.PubSubPublisherTemplate; im

我正在使用SpringBoot与pubsub主题进行交互

此连接的配置类如下所示:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.gcp.pubsub.core.PubSubTemplate;
import org.springframework.cloud.gcp.pubsub.core.publisher.PubSubPublisherTemplate;
import org.springframework.cloud.gcp.pubsub.support.PublisherFactory;
import org.springframework.cloud.gcp.pubsub.support.converter.SimplePubSubMessageConverter;
import org.springframework.util.Assert;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.util.concurrent.SettableListenableFuture;

import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutureCallback;
import com.google.api.core.ApiFutures;
import com.google.pubsub.v1.PubsubMessage;

public abstract class PubSubPublisher {

    private static final Logger LOGGER = LoggerFactory.getLogger(PubSubPublisher.class);

    private final PubSubTemplate pubSubTemplate;


    protected PubSubPublisher(PubSubTemplate pubSubTemplate) {
        this.pubSubTemplate = pubSubTemplate;
    }

    protected abstract String topic(String topicName);

    public  ListenableFuture<String> publish(String topicName, String message) {
        LOGGER.info("Publishing to topic [{}]. Message: [{}]", topicName, message);
        return pubSubTemplate.publish(topicName, message);
    }

}
publisher.publish(topic-name, payload);
这个发布方法是异步的,它总是在不等待确认的情况下传递。我让addget在publish之后等待,直到它从pubsub获得响应

但我想知道,如果我的主题还没有出现,并且我试图推送一些消息,它是否应该抛出一些错误,比如ResourceNotFound,考虑只使用默认的异步方法


可能实现回调会有所帮助,但我无法在代码中实现这一点。当前使用回调的overridepublish方法只是抛出WARN not异常,我希望它是异常。这就是我想要实现回调的原因。

您可以检查主题是否已经存在

from google.cloud import pubsub_v1

project_id = "projectname"
topic_name = "unknowTopic"

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project_id, topic_name)
try:
    response = publisher.get_topic(topic_path)
except Exception as e:
    print(e)
这会将错误返回为

404 Resource not found (resource=unknowTopic).

您可以检查主题是否已经存在

from google.cloud import pubsub_v1

project_id = "projectname"
topic_name = "unknowTopic"

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project_id, topic_name)
try:
    response = publisher.get_topic(topic_path)
except Exception as e:
    print(e)
这会将错误返回为

404 Resource not found (resource=unknowTopic).