- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用go客户端库从pub-sub订阅中一次提取1条消息。但是,即使订阅中存在消息,消息也不会按请求请求进行拉动。订户正在等待所有消息被处理。
我正在尝试基本代码,每次我只提取一条消息。我已经使用了两个实例,并在两个后台同时运行了4次脚本(以创建订户)。我已将ack_deadline设置为10秒。
我希望结果像每个订阅者都应在确认一条消息后从订阅中获取下一条消息。但是直到完成最后的消息处理后,消息才在实例上运行。
为什么在完成一条消息处理后未提取消息?据我所知,实例或订户不应该有任何依赖关系。
让mi知道需要设置任何其他更改或参数。
提前致谢。
这是一个实例的日志:
2019/10/21 05:22:07 Got message: Message 0 at 2019-10-21 05:22:07.022772532
2019/10/21 05:22:11 Got message: Message 1 at 2019-10-21 05:22:11.330566981
2019/10/21 05:22:14 Got message: Message 2 at 2019-10-21 05:22:14.803031569
2019/10/21 05:22:18 Got message: Message 3 at 2019-10-21 05:22:18.452912271
2019/10/21 05:38:39 Acking message: Message 3 at 2019-10-21 05:38:39.471739478
2019/10/21 05:39:10 Acking message: Message 0 at 2019-10-21 05:39:10.039336794
2019/10/21 05:41:22 Acking message: Message 1 at 2019-10-21 05:41:22.351124342
2019/10/21 05:50:31 Acking message: Message 2 at 2019-10-21 05:50:31.829087762
2019/10/21 05:50:39 Got message: Message 13 at 2019-10-21 05:50:39.005916608
2019/10/21 05:50:39 Got message: Message 11 at 2019-10-21 05:50:39.00623238
2019/10/21 05:50:39 Got message: Message 15 at 2019-10-21 05:50:39.007216256
2019/10/21 05:50:39 Got message: Message 12 at 2019-10-21 05:50:39.008066257
2019/10/21 05:22:29 Got message: Message 4 at 2019-10-21 05:22:29.331569077
2019/10/21 05:22:33 Got message: Message 5 at 2019-10-21 05:22:33.018801275
2019/10/21 05:22:36 Got message: Message 6 at 2019-10-21 05:22:36.803434547
2019/10/21 05:22:40 Got message: Message 7 at 2019-10-21 05:22:40.409314927
2019/10/21 05:39:38 Acking message: Message 4 at 2019-10-21 05:39:38.349619635
2019/10/21 05:42:42 Acking message: Message 6 at 2019-10-21 05:42:42.819874065
2019/10/21 05:47:40 Acking message: Message 5 at 2019-10-21 05:47:40.049128075
2019/10/21 05:50:38 Acking message: Message 7 at 2019-10-21 05:50:38.42874031
2019/10/21 05:50:39 Got message: Message 8 at 2019-10-21 05:50:39.005090906
2019/10/21 05:50:39 Got message: Message 9 at 2019-10-21 05:50:39.005334146
2019/10/21 05:50:39 Got message: Message 16 at 2019-10-21 05:50:39.006427796
2019/10/21 05:50:39 Got message: Message 14 at 2019-10-21 05:50:39.007231713
package main
// [START pubsub_publish_with_error_handling_that_scales]
import (
"context"
"fmt"
"os"
"log"
"time"
"math/rand"
pubsub "cloud.google.com/go/pubsub/apiv1"
pubsubpb "google.golang.org/genproto/googleapis/pubsub/v1"
)
func main(){
f, _:= os.OpenFile("testlogfile", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666)
defer f.Close()
log.SetOutput(f)
rand.Seed(time.Now().UTC().UnixNano())
pullMsgs("sureline-dev-1264", "sub7")
}
func random(min, max int) int {
return rand.Intn(max - min) + min
}
func pullMsgs(projectID, subscriptionID string) error {
ctx := context.Background()
client, err := pubsub.NewSubscriberClient(ctx)
if err != nil {
log.Fatal(err)
}
defer client.Close()
sub := fmt.Sprintf("projects/%s/subscriptions/%s", projectID, subscriptionID)
// Be sure to tune the MaxMessages parameter per your project's needs, and accordingly
// adjust the ack behavior below to batch acknowledgements.
req := pubsubpb.PullRequest{
Subscription: sub,
MaxMessages: 1,
}
fmt.Println("Listening..")
for {
res, err := client.Pull(ctx, &req)
if err != nil {
log.Fatal(err)
}
// client.Pull returns an empty list if there are no messages available in the
// backlog. We should skip processing steps when that happens.
if len(res.ReceivedMessages) == 0 {
continue
}
var recvdAckIDs []string
for _, m := range res.ReceivedMessages {
recvdAckIDs = append(recvdAckIDs, m.AckId)
}
var done = make(chan struct{})
var delay = 0 * time.Second // Tick immediately upon reception
var ackDeadline = 10 * time.Second
// Continuously notify the server that processing is still happening on this batch.
go func() {
for {
select {
case <-ctx.Done():
return
case <-done:
return
case <-time.After(delay):
err := client.ModifyAckDeadline(ctx, &pubsubpb.ModifyAckDeadlineRequest{
Subscription: sub,
AckIds: recvdAckIDs,
AckDeadlineSeconds: int32(ackDeadline.Seconds()),
})
if err != nil {
log.Fatal(err)
}
delay = ackDeadline - 5*time.Second // 5 seconds grace period.
}
}
}()
for _, m := range res.ReceivedMessages {
// Process the message here, possibly in a goroutine.
log.Printf("Got message: %s at %v", string(m.Message.Data), time.Now())
fmt.Printf("Got message: %s at %v", string(m.Message.Data), time.Now())
myrand := random(240, 420)
log.Printf("Sleeping %d seconds...\n", myrand)
time.Sleep(time.Duration(myrand)*time.Second)
err := client.Acknowledge(ctx, &pubsubpb.AcknowledgeRequest{
Subscription: sub,
AckIds: []string{m.AckId},
})
log.Printf("Acking message: %s at %v", string(m.Message.Data), time.Now())
fmt.Printf("Acking message: %s at %v", string(m.Message.Data), time.Now())
if err != nil {
log.Fatal(err)
}
}
close(done)
}
}
最佳答案
尝试以这种方式一次提取一条消息是Cloud Pub / Sub的反模式。在您的情况下,您的订户可能最终会与其他服务器通信,这些服务器已分配了要发送给连接到它们的订户的消息。 Cloud Pub / Sub希望同时从使用此方法接收消息的客户端接收多个拉取请求。因此,您应该一次有几个未完成的拉取请求,或者应该使用asynchronous pull via the Receive method。
关于go - Pubsub.pull请求无法正常工作-转到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58484386/
对新版本 com.google.cloud.pubsub.spi.v1.Publisher.publish(pubsubMessage).get() 的调用永远挂起。我不确定问题是什么。 代码片段:
根据这里:https://cloud.google.com/pubsub/docs/reference/rest/v1/PubsubMessage 当发布者向队列发送消息时,不应填充时间戳字段。所以这
Google PubSub 是否适合小批量(10 条消息/秒)但任务关键型消息传递,保证在任何固定时间段内及时传递每条消息? 或者,它是否更适合高吞吐量,其中个别消息可能偶尔会丢失或无限期延迟? 编辑
我们创建了一个 pull使用 GCP Web GUI 的默认确认截止时间为 10 秒的 PubSub 订阅。原来是我们太乐观了,我们的服务处理一批拉取的消息需要10多秒的时间。该服务不会抛出异常,它实
批处理 pubsub 请求的 NODEJS 示例代码如下所示: // Imports the Google Cloud client library const PubSub = require(`@
在 Google PubSub 中,可以异步调用来自客户端的发布调用。因此,我认为可以同时触发多个发布请求并将其发送到服务器,尤其是在批处理阈值太低的情况下。 如果这是真的,pubsub 客户端如何控
根据堆栈驱动程序图表,我们开始注意到某个主题/订阅的“未确认消息”数量不时增加。 症状 我不知道我们可以信任多少堆栈驱动程序图表,但我已经检查过: 拉取操作数与发布操作数一样多 问题发生时ack操作计
我有一个将数据写入 Google Cloud pubsub 的应用程序,根据 pubsub 的文档,由于重试机制导致的重复是偶尔会发生的事情。还有乱序消息的问题,这在 pubsub 中也不能保证。 另
我有一个包含多个拉取订阅的 pubsub 主题。我想要某种机制,我可以在其中发布带有“优先级”标签的消息,使消息尽可能地跳到队列的前面。 我不需要任何有保证的排序语义,只需要“尽力而为”的优先级机制。
我在我们的平台中集成了 GMB API,并与 PubSub 合作以获取实时评论通知。 为此,我已经完成了以下步骤: Created topic在谷歌 PubSub 云上。 创建了它的 subscrip
试图找出在本地测试 PubSub 推送端点的最佳方法。我们尝试过使用 ngrok.io,但您必须拥有域才能加入白名单(这样做的工具也已损坏……导致无限重定向循环)。我们还尝试在本地模拟 PubSub。
我们希望通过带有 pubsub 触发器 ( https://firebase.google.com/docs/functions/pubsub-events ) 的 firebase 云函数接收有关某
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 2年前关闭。 Improve t
我有一个向 PubSub 主题发布消息的简单服务,偶尔会收到“已超过截止日期”错误消息: GaxError(RPC failed, caused by ) Python代码: from google.
我的应用程序发布少量消息(最多每几秒 1 条)。它不订阅。 首次使用时,PubSub 会创建 60 个永久保持事件状态的线程,如下所示: "grpc-default-worker-ELG-1-1 Id
我想检查运行代码是否有权在特定项目中执行“pubsub.topics.list”。这段代码: try (TopicAdminClient admin = getTopicAdmin()) {
我正在开发微博 spring mvc hibernate 应用程序。我需要实现像推特这样的发布订阅功能。 我正在使用 RabbitMQ 通过 Spring AMQP 抽象进行消息传递。 我在网络上到处
我对 Airflow 很陌生,并尝试使用 apache Airflow 与 google pubsub 的集成,我猜它是添加到“Airflow-300”JIRA 下的。如果我在这里阅读不正确,请纠正我
我正在学习 https://www.woolha.com/tutorials/node-js-google-cloud-pub-sub-basic-examples 上的教程并且有一些困难.. 我在
我在我的 .net 核心微服务中使用 DAPR 和 Docker。我在 docker-compose.yml 中进行了以下配置以运行代理和 dapr pubsub 配置。 PUBSUB.yml api
我是一名优秀的程序员,十分优秀!