本文介绍如何使用 Azure 事件网格将事件发送到主题,并使用服务总线队列作为事件处理程序在 Spring Boot 应用程序中接收事件。
Azure 事件网格 服务是一种高度可缩放的完全托管的 Pub 子消息分发服务,它使用 MQTT 和 HTTP 协议提供灵活的消息使用模式。
先决条件
Azure 订阅 - 免费创建订阅。
Java 开发工具包(JDK) 版本 8 或更高。
Apache Maven3.0 或更高版本。
事件网格主题实例。 如果没有,请参阅 在 Azure 事件网格创建自定义主题或域。
服务总线队列实例。 如果你没有 , 请参见 在 Azure 门户中创建队列.
Spring Boot 应用程序。 如果没有,请使用 Spring Initializr创建 Maven 项目。 请务必选择 Maven 项目 并选择 Java 版本 8 或更高版本。
订阅自定义主题
使用以下步骤创建事件订阅,告知事件网格将事件发送到服务总线队列:
- 在 Azure 门户中,导航到事件网格主题实例。
- 选择工具栏上的活动订阅。
- 在“创建事件订阅”页上,为事件订阅输入名称值。
- 对于 端点类型, 遴选 服务总线队列.
- 选择 选择终结点,然后选择前面创建的服务总线队列实例。
通过 Azure 事件网格发送事件,并通过 Azure 服务总线队列接收事件
有了 Azure 事件网格资源,就可以使用 Spring Cloud Azure 事件网格发送事件。 使用 Azure 服务总线队列资源作为事件处理程序,可以通过适用于服务总线的 Spring Cloud Azure 流绑定器接收事件。
若要安装 Spring Cloud Azure 事件网格初学者模块和 Spring Cloud Azure Stream Binder 服务总线模块,请将以下依赖项添加到 pom.xml 文件中:
Spring Cloud Azure 材料清单(BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.22.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
注意
如果使用 Spring Boot 2.x,请确保将
spring-cloud-azure-dependencies
版本设置为4.20.0
。 应在<dependencyManagement>
文件的 部分中配置此材料清单(BOM)。 这可确保所有 Spring Cloud Azure 依赖项都使用相同的版本。 关于所用 BOM 版本的更多信息,请参阅 我应该使用哪个版本的 Spring Cloud Azure。Spring Cloud Azure 事件网格初学者工件:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-eventgrid</artifactId> </dependency>
Spring Cloud Azure 流绑定器服务总线工件:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-stream-binder-servicebus</artifactId> </dependency>
对应用程序进行编码
使用以下步骤将应用程序配置为使用事件网格发送事件,并使用服务总线队列接收事件。
在 application.yaml 配置文件中配置 Azure 事件网格和服务总线凭据,如以下示例所示:
spring: cloud: azure: eventgrid: endpoint: ${AZURE_EVENTGRID_ENDPOINT} key: ${AZURE_EVENTGRID_KEY} servicebus: connection-string: ${AZURE_SERVICEBUS_CONNECTION_STRING} function: definition: consume stream: bindings: consume-in-0: destination: ${AZURE_SERVICEBUS_QUEUE_NAME} servicebus: bindings: consume-in-0: consumer: auto-complete: false
注意
Microsoft 建议使用最安全的可用身份验证流。 本过程中介绍的身份验证流程(例如数据库、缓存、消息传送或 AI 服务)需要非常高的信任度,并携带其他流中不存在的风险。 仅当更安全的选项(例如无密码连接或无密钥连接的托管标识)不可行时,才使用此流。 对于本地计算机操作,首选无密码连接或无密钥连接的用户标识。
编辑启动类文件以显示以下内容。 此代码将生成补全内容。
import com.azure.core.util.BinaryData; import com.azure.messaging.eventgrid.EventGridEvent; import com.azure.messaging.eventgrid.EventGridPublisherClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.messaging.Message; import java.util.List; import java.util.function.Consumer; @SpringBootApplication public class EventGridSampleApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(EventGridSampleApplication.class); @Autowired EventGridPublisherClient<EventGridEvent> client; public static void main(String[] args) { SpringApplication.run(EventGridSampleApplication.class, args); } @Bean public Consumer<Message<String>> consume() { return message -> { List<EventGridEvent> eventData = EventGridEvent.fromString(message.getPayload()); eventData.forEach(event -> { LOGGER.info("New event received: '{}'", event.getData()); }); }; } @Override public void run(String... args) throws Exception { String str = "FirstName: John, LastName: James"; EventGridEvent event = new EventGridEvent("A user is created", "User.Created.Text", BinaryData.fromObject(str), "0.1"); client.sendEvent(event); LOGGER.info("New event published: '{}'", event.getData()); } }
启动应用程序。 启动后,应用程序生成类似于以下示例的日志:
New event published: '"FirstName: John, LastName: James"' ... New event received: '"FirstName: John, LastName: James"'
将应用程序部署到 Azure Spring 应用服务
现在,你已在本地运行 Spring Boot 应用程序,现在可以将其移动到生产环境。 Azure Spring Apps 可以轻松地将 Spring Boot 应用程序部署到 Azure,而无需更改任何代码。 该服务管理 Spring 应用程序的基础结构,以便开发人员可以专注于其代码。 Azure Spring Apps 使用全面的监视和诊断、配置管理、服务发现、CI/CD 集成、蓝绿部署等提供生命周期管理。 若要将应用程序部署到 Azure Spring Apps,请参阅 将第一个应用程序部署到 Azure Spring Apps。
后续步骤
若要了解有关 Spring 和 Azure 的详细信息,请继续阅读 Azure 上的 Spring 文档中心。