发件箱夸克扩展
概述
这个扩展的灵感来自发件箱事件路由器单消息转换(SMT)。正如博客文章中讨论的那样使用发件箱模式进行可靠的微服务数据交换在美国,微服务通常需要彼此交换信息,而处理这种情况的一个很好的方法是使用发件箱模式结合Debezium的发件箱事件路由器SMT。开云体育官方注册网址
下图显示了该模式的整体架构:
发件箱扩展的目标是提供一个Quarkus应用程序使用可重用的、高度可配置的组件,该组件促进了与Debezium的CDC连接器管道配对的发件箱模式的使用,从而与所述数据的任何消费者可靠且异步地共享数据。开云体育官方注册网址
开始
为了开始使用Debezium Outbox Quarku开云体育官方注册网址s扩展,需要将扩展添加为Quarkus应用程序的一部分,如下所示:
1.1.2. io. debezu .quarkus debezu -quarku -outbox 。最终版本> < / > < /依赖
扩展为应用程序提供io.开云体育官方注册网址debezium.outbox.quarkus.ExportedEvent
接口。类将实现此接口,并且事件将使用javax.enterprise.event.Event
类。
的 |
例子
方法的实现ExportedEvent
接口,表示已创建的订单:
公共类OrderCreatedEvent实现了ExportedEvent {private static final String TYPE = "Order";private static final String EVENT_TYPE = "OrderCreated";private final long orderId;private final JsonNode;即时时间戳;public OrderCreatedEvent(即时createdAt,订单订单){此。orderId = order.getId();这一点。时间戳= createdAt;这一点。jsonNode = convertToJson(order); } @Override public String getAggregateId() { return String.valeuOf(orderId); } @Override public String getAggregateType() { return TYPE; } @Override public JsonNode getPayload() { return jsonNode; } @Override public String getType() { return EVENT_TYPE; } @Override public Instant getTimestamp() { return timestamp; } }
下面的示例说明了OrderService
它发出OrderCreatedEvent
:
@应用程序作用域的公共类OrderService{@注入事件< export tedevent >>事件;@事务性公共订单addOrder(订单订单){订单= orderRepository.save(订单);事件。fire(new OrderCreatedEvent(Instant.now(), order));返回订单;}}
当应用程序代码通过调用触发事件时事件#火()
时,发件箱扩展将收到事件发生的通知,并将事件的内容持久化到当前事务范围内的发件箱事件表中。Debe开云体育官方注册网址zium CDC连接器将与发件箱事件路由器一起监视该表,并将负责使用CDC事件转发数据。
要查看完整的端到端演示,请使用发件箱下面的示例演示了两个Quarkus微服务应用程序在下达或取消订单时使用发件箱模式在它们之间共享数据。
配置
可以通过在Quarkus中设置选项来配置发件箱扩展application.properties
文件。该扩展可以使用默认配置开箱即用,但此配置可能并不适用于每种情况。
构建时配置选项
配置属性 |
类型 |
默认的 |
|
字符串 |
OutboxEvent |
|
字符串 |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
生成时配置默认值将与发件箱事件路由器SMT一起使用。当不使用默认值时,请确保SMT配置匹配。 |