繁体   English   中英

使用 Azure 服务总线发布/订阅

[英]Publish/subscribe with Azure Service Bus

我有一个微服务(Web API),它将消息发布到一个主题(主题 A)。

现在我有另一个微服务(Web API)应该订阅这个主题并对消息采取行动。

我的问题很简单:我应该怎么做,因为我应该订阅 Topic 的微服务是一个 WebApi? 在我的 web api 中,我想以某种方式立即知道主题中何时有新消息可用。 我应该通过端点轮询服务总线吗?

我不确定这方面的最佳实践。

我见过的所有使用控制台应用程序订阅的示例。 但这不是我的情况,因为我有一个 web api。

有不同的方法可以做到这一点。

1. 使用Azure 函数

这样您就可以创建两个应用程序。 您的标准 Web api,并单独创建一个 Azure 函数来处理来自队列的消息。 这种方法有很多好处,其中之一就是你隔离了处理队列的代码,所以如果你有很多消息,它不会影响你的 API 的性能

2.在 Web 应用程序中使用Singleton 服务

这里的想法是您的 API 应用程序在后台处理队列消息。 这样做的好处是您只有一个应用程序可以完成所有工作,例如易于维护。 它的缺点是大量的消息流入会减慢您的 API。

(注意,在上面的链接中查找从队列中使用消息

无论是WebAPI还是console ,沟通和收集记录都是消费者的责任。 作为一个 WebAPI 并不意味着它应该只有公共端点。 典型的 WebAPI,可能具有公共端点(用于外部世界)或可以具有私有端点(用于内部通信)或可以具有两者的组合。 私有端点的职责可能是从服务数据存储中读取数据,通过适配器服务使用外部服务等。在您的情况下,在您的 WebAPI 初始化时,您可能希望创建一个使用者对象并开始读取数据并根据需要进行处理. 希望这有帮助。

您可以在 Web 作业或后台任务中进行轮询。 但内置的方法是使用从主题触发的Azure 函数,或使用Azure 事件网格

要在后台收听,您可以使用IHostedService 内部方法StartAsync

您可以注册消息处理器;

  queueClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions)

StopAsync您可以停止处理消息并关闭客户端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM