【问题标题】:Connecting to Azure Event Grid and Service Bus using Java/Spring使用 Java/Spring 连接到 Azure 事件网格和服务总线
【发布时间】:2026-02-17 00:50:02
【问题描述】:

我有一个场景,只要 Azure 服务总线的队列/主题中有消息,Azure ServiceBus 就会向 Event Grid 发送事件。 那么如何在 Java/Spring 中与 Event Grid 建立连接以接收事件以及与 Service Bus 建立连接以提取消息。 在 Java/Spring 中要进行哪些配置以建立与事件网格和 Azure 服务总线的连接?另外,在应用程序端(application.yml 或属性文件)必须进行哪些配置才能包含连接字符串等内容?

【问题讨论】:

标签: java spring spring-boot azure


【解决方案1】:

Azure 服务总线到事件网格的集成

服务总线现在可以在队列中有消息时向事件网格发出事件,或者在没有接收者的情况下订阅。您可以为您的服务总线命名空间创建事件网格订阅,侦听这些事件,然后通过启动接收器对事件做出反应。

要启用该功能,您需要以下项目:

  • 具有至少一个服务总线队列的服务总线高级命名空间或具有至少一个订阅的服务总线主题。
  • 对服务总线命名空间的参与者访问。导航到 Azure 门户中的服务总线命名空间,然后选择访问控制 (IAM),然后选择角色分配选项卡。验证您是否拥有命名空间的贡献者访问权限。
  • 此外,您需要为服务总线命名空间订阅事件网格。此订阅接收来自事件网格的通知,表明有消息要提取。典型的订阅者可能是 Azure 应用服务的逻辑应用功能、Azure Functions 或联系 Web 应用的 webhook。然后订阅者处理这些消息。

查看此Microsoft document 了解更多信息。

选中this one 以使用 Azure Function 连接两者。

查看此文档以使用Logic App 连接两者。

Azure CLI:

namespaceid=$(az resource show --namespace Microsoft.ServiceBus --resource-type namespaces --name "<service bus namespace>" --resource-group "<resource group that contains the service bus namespace>" --query id --output tsv

az eventgrid event-subscription create --resource-id $namespaceid --name "<YOUR EVENT GRID SUBSCRIPTION NAME>" --endpoint "<your_endpoint_url>" --subject-ends-with "<YOUR SERVICE BUS SUBSCRIPTION NAME>"

Powershell:

$namespaceID = (Get-AzServiceBusNamespace -ResourceGroupName "<YOUR RESOURCE GROUP NAME>" -NamespaceName "<YOUR NAMESPACE NAME>").Id

New-AzEVentGridSubscription -EventSubscriptionName "<YOUR EVENT GRID SUBSCRIPTION NAME>" -ResourceId $namespaceID -Endpoint "<YOUR ENDPOINT URL>” -SubjectEndsWith "<YOUR SERVICE BUS SUBSCRIPTION NAME>"

【讨论】:

    【解决方案2】:

    【讨论】:

    • 谢谢@BowmanZhu。此处未使用 Azure 函数,并且它超出了我的方案的范围,而是在我的情况下,服务总线主题已被选为事件网格安静的事件处理程序,类似于此链接(docs.microsoft.com/en-us/天蓝色/事件网格/处理程序服务总线)。所以我有两个服务总线主题。具有实际数据/消息的第一个主题和第二个主题(与事件网格关联的事件处理程序)具有第一个主题发出的事件信息。所以我需要听第二个主题,然后从第一个主题中提取实际数据