如何使用Go指定Google Pub/Sub拉取的消息数量?
如何在Google Pub/Sub中仅拉取2条消息
在调用Pub/Sub的拉取消息API时,通过指定最大拉取消息数参数为2即可实现需求,不同语言的客户端SDK都提供了对应的配置项:
- Python客户端示例:
from google.cloud import pubsub_v1 subscriber = pubsub_v1.SubscriberClient() subscription_path = subscriber.subscription_path("你的项目ID", "你的订阅ID") # 拉取最多2条消息 pull_response = subscriber.pull( request={"subscription": subscription_path, "max_messages": 2} ) # 处理拉取到的消息 for msg in pull_response.received_messages: print(f"收到消息内容:{msg.message.data.decode('utf-8')}") # 确认消息,避免重复拉取 subscriber.acknowledge( request={"subscription": subscription_path, "ack_ids": [msg.ack_id]} )
- Java客户端示例:
import com.google.cloud.pubsub.v1.SubscriberClient; import com.google.pubsub.v1.ProjectSubscriptionName; import com.google.pubsub.v1.PullRequest; import com.google.pubsub.v1.ReceivedMessage; import java.io.IOException; import java.util.List; public class PubSubPullExample { public static void main(String[] args) throws IOException { String projectId = "你的项目ID"; String subscriptionId = "你的订阅ID"; ProjectSubscriptionName subscriptionName = ProjectSubscriptionName.of(projectId, subscriptionId); try (SubscriberClient subscriberClient = SubscriberClient.create()) { // 构建拉取请求,设置最大消息数为2 PullRequest request = PullRequest.newBuilder() .setSubscription(subscriptionName.toString()) .setMaxMessages(2) .build(); // 执行拉取 var response = subscriberClient.pull(request); List<ReceivedMessage> messages = response.getReceivedMessagesList(); // 处理消息并确认 for (ReceivedMessage msg : messages) { System.out.println("收到消息:" + msg.getMessage().getData().toStringUtf8()); subscriberClient.acknowledge(subscriptionName.toString(), List.of(msg.getAckId())); } } } }
需要注意:如果订阅中可用的消息数量不足2条,API会返回当前所有可用的消息,不会等待凑够2条再返回。
内容的提问来源于stack exchange,提问作者Gabriel Belloni
相关产品推荐
相关产品推荐

