如果您使用 BigQuery 计划 Pub/Sub 通知时遇到以下错误:“Message id '1234567890' not found in topic 'projects/project-id/topics/topic-name'”,请按照以下步骤进行解决:
确认您的 Pub/Sub 主题名称是否正确,正确的格式为:projects/project-id/topics/topic-name。
确认您的 Pub/Sub 订阅器是否启用了自动确认。您可以使用以下代码在创建订阅器时启用自动确认:
from google.cloud import pubsub_v1
subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(
'[PROJECT]', '[SUBSCRIPTION]'
)
def callback(message):
print(f'Received message: {message}')
message.ack()
streaming_pull_future = subscriber.subscribe(
subscription_path, callback=callback)
print(f'Listening for messages on {subscription_path}')
with subscriber:
try:
streaming_pull_future.result()
except TimeoutError:
streaming_pull_future.cancel()
如果您已经将订阅器设置为自动确认,并且仍然无法解决问题,请检查订阅器是否已订阅正确的主题。
如果以上步骤无法解决该问题,请检查您的项目是否具有正确的权限以对 Pub/Sub 主题和订阅器进行操作。您需要具有以下权限:pubsub.subscriptions.consume 和 pubsub.topics.attachSubscription。
此外,您还可以使用以下命令检查您是否具有这些权限:
gcloud projects get-iam-policy [PROJECT_ID] --flatten="bindings[].members" --format='table(bindings.role)' \
| grep -v roles/editor | grep -v roles/owner | sort | uniq
如果您没有这些权限,请联系您的项目管理员将其授予给您。