首页 > 解决方案 > 使用 Java/Spring 连接到 Azure 事件网格和服务总线

问题描述

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

标签: javaspringspring-bootazure

解决方案


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

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

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

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

在此处输入图像描述

查看此Microsoft 文档以获取更多信息。

选中此项以使用 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>"

电源外壳:

$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>"

推荐阅读