google 发布-订阅 setMaxMessages
google pub-sub setMaxMessages
我正在使用 google pubsub 同步获取消息
com.google.pubsub.v1.PullRequest.Builder pullRequestBuilder = PullRequest.newBuilder().setSubscription(subscriptionName).setReturnImmediately(returnImmediately);
if (maxMessages != 0) {
pullRequestBuilder.setMaxMessages(maxMessages);
}
PullRequest pullRequest = pullRequestBuilder.build();
PullResponse pullResponse = (PullResponse)this.subscriber.pullCallable().call(pullRequest);
return pullResponse.getReceivedMessagesList();
我在文档中看到:
setMaxMessages
public PullRequest setMaxMessages(java.lang.Integer maxMessages)
The maximum number of messages returned for this request. The Pub/Sub system may return fewer than the number specified.
Parameters:
maxMessages - maxMessages or null for none
在我的代码中,我传递了 MAX_INT 以避免任何最大消息限制
但我看到我的 java 代码一条一条地提取消息。
跳过最大限制的正确方法是什么?
我怎么知道这不仅仅是发布-订阅错误?
我有时会收到 0 条消息,尽管发布订阅中有一些消息。
当您使用同步拉取方法时,设置 maxMessages
字段并不能保证您会收到那么多消息,即使有超过该数量的可用消息也是如此。在消息的端到端延迟和单个响应中 returned 的消息数量之间存在权衡。如果服务等到 maxMessages
可以发送,则缓冲和等待的消息将具有更高的端到端延迟。
可以在单个响应中 returned 的最大消息数是 1,000,无论 maxMessages
设置的有多高。如果您想让您的回复更有可能包含更多消息,请确保将 returnImmediately
设置为 false。如果此字段为真,则服务会尽可能快地尝试 return,这意味着它可能不会在 returning 之前等待消息加载。这可能就是您在某些回复中看到 0 条消息被 return 编辑的原因。
如果您正在尝试最大化吞吐量,则需要使用 StreamingPull, or even better, the Cloud Pub/Sub client libraries,它在后台使用 StreamingPull。这样,消息一可用就可以将消息传送到开放的流连接。
我正在使用 google pubsub 同步获取消息
com.google.pubsub.v1.PullRequest.Builder pullRequestBuilder = PullRequest.newBuilder().setSubscription(subscriptionName).setReturnImmediately(returnImmediately);
if (maxMessages != 0) {
pullRequestBuilder.setMaxMessages(maxMessages);
}
PullRequest pullRequest = pullRequestBuilder.build();
PullResponse pullResponse = (PullResponse)this.subscriber.pullCallable().call(pullRequest);
return pullResponse.getReceivedMessagesList();
我在文档中看到:
setMaxMessages
public PullRequest setMaxMessages(java.lang.Integer maxMessages)
The maximum number of messages returned for this request. The Pub/Sub system may return fewer than the number specified.
Parameters:
maxMessages - maxMessages or null for none
在我的代码中,我传递了 MAX_INT 以避免任何最大消息限制
但我看到我的 java 代码一条一条地提取消息。
跳过最大限制的正确方法是什么?
我怎么知道这不仅仅是发布-订阅错误?
我有时会收到 0 条消息,尽管发布订阅中有一些消息。
当您使用同步拉取方法时,设置 maxMessages
字段并不能保证您会收到那么多消息,即使有超过该数量的可用消息也是如此。在消息的端到端延迟和单个响应中 returned 的消息数量之间存在权衡。如果服务等到 maxMessages
可以发送,则缓冲和等待的消息将具有更高的端到端延迟。
可以在单个响应中 returned 的最大消息数是 1,000,无论 maxMessages
设置的有多高。如果您想让您的回复更有可能包含更多消息,请确保将 returnImmediately
设置为 false。如果此字段为真,则服务会尽可能快地尝试 return,这意味着它可能不会在 returning 之前等待消息加载。这可能就是您在某些回复中看到 0 条消息被 return 编辑的原因。
如果您正在尝试最大化吞吐量,则需要使用 StreamingPull, or even better, the Cloud Pub/Sub client libraries,它在后台使用 StreamingPull。这样,消息一可用就可以将消息传送到开放的流连接。