为 Azure 服务总线主题创建侦听器

问题描述 投票:0回答:1

我有一个用 .NetFramework 4.6 编写的 WCF 服务,该服务处理对客户执行的所有 CRUD 操作。我用 .Net core 3.0 编写了微服务。创建新客户后,WCF 服务将向 Azure 服务总线主题发送消息。我想实现一个侦听器,侦听发送到队列的消息并将其同步到另一个数据库。 我想将侦听器的代码注入到微服务中,因为它包含将数据同步到其他数据库的 API。 我想知道我是否应该在微服务中添加一个项目,该项目是一个 Azure 函数,侦听该服务总线主题,并在其内部调用同一服务的服务层以将数据发送到其他数据库,或者我可以直接将侦听器代码注入我只关心这个解决方案的可扩展性和可维护性。我进行了调查,但无法决定应该使用哪种解决方案,因为我以前从未使用过服务总线。

我尝试创建 Azure 函数,它的触发器是队列消息,但问题是 Azure 函数强制您只能选择一个主题来订阅,目前我有 CreateCustomer 主题,但将来我还将有 UpdatedCustomer 主题并删除了客户。如果我应该为每个主题提供 Azure 功能,我会感到很受伤,但我担心在这种情况下微服务将转换为非运动。 关于直接注入监听器代码并编写在应用程序生命周期中激活监听器的代码的另一种解决方案听起来会增加代码的复杂性并使其难以维护

c# azure wcf azureservicebus
1个回答
0
投票
  • 第一种方法是创建一个 Azure Function,该函数侦听服务总线主题并从同一服务调用服务层以将数据发送到另一个数据库。但是,您提到您有多个主题,并且为每个主题创建一个 Azure Function 可能无法扩展。

使用此引用,我们可以发送到单个函数

[ServiceBusTrigger(
                topicName: "%MyServiceBus.Topic%",
                subscriptionName: "%MyServiceBus.Subscription%",
                Connection = "MyServiceBus.Connection")]

主机.json:

{  
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "PriorityBoardingFare.Topic": "TestEvent",
    "PriorityBoardingFare.Subscription": "Appl1cation1",
    "PriorityBoardingFare.Connection": "Endpoint=sb://xxxxxxxxx.windows.net/;SharedAccessKeyName=xxxxxxd;SharedAccessKey=adasdasdasdasdasdasd"    
  },
  "Host": {
    "LocalHttpPort": 21094
  }
}

enter image description here

  • 第二种方法是直接在微服务业务层注入监听器代码,并在微服务的生命周期内启动监听器并运行。这种方法可能会增加代码的复杂性并使其更难以维护。

考虑到可扩展性和可维护性,建议监听器代码使用单独的项目,并使用MassTransit等消息处理框架。

参考:

© www.soinside.com 2019 - 2024. All rights reserved.