【发布时间】:2018-03-29 03:23:10
【问题描述】:
我想实现一个 ASP.NET Core API,它不响应 HTTP 请求,但在启动时开始侦听 Google Cloud Pub/Sub 消息,并且在整个生命周期中无限期地侦听。
使用官方 Pub/Sub SDK 实现此功能的首选方式是什么?
我可以想到两种方法:
方法1:只需使用SimpleSubscriber,并在Startup.Configure 开始收听消息:
public void Configure(IApplicationBuilder app)
{
var simpleSubscriber = await SimpleSubscriber.CreateAsync(subscriptionName);
var receivedMessages = new List<PubsubMessage>();
simpleSubscriber.StartAsync((msg, cancellationToken) =>
{
// Process the message here.
return Task.FromResult(SimpleSubscriber.Reply.Ack);
});
...
}
方法 2:使用专门创建的库来定期运行作业,例如 Quartz、Hangfire 或 FluentScheduler,每次触发作业时,使用 SubscriberClient 拉取新消息。
哪种方法是首选方法?第一个看起来比较简单,但我不确定它是否真的可靠。
【问题讨论】:
-
@Flater 这是一个在 Kubernetes 中运行的 ASP.NET Core 应用程序。我希望该应用程序同时具有一些 REST 端点,和继续收听一些 Pub/Sub 消息。 (我知道我可以将这两件事分成两个部分,但如果可能的话,为了方便起见,我想将其保留为一个。)
-
我会从最简单的方法开始,然后如果需要,转移到图书馆。在您的示例中,我只会添加代码以将
simpleSubscriber保留在静态字段中的某个位置,以保护对象免受 GC -
据我知道,第一种方法应该没问题 - 但我正在咨询一位了解更多的同事。
标签: c# asp.net-core google-cloud-platform google-cloud-pubsub