如何使用 debezium 处理发件箱模式?

Posted

技术标签:

【中文标题】如何使用 debezium 处理发件箱模式?【英文标题】:How to work on outbox pattern using debezium? 【发布时间】:2021-05-31 05:28:51 【问题描述】:

有人有使用 debezium 创建发件箱模式的好链接吗?

以下 URL 中提到的步骤似乎不起作用。

https://github.com/debezium/debezium-examples/tree/master/outbox

错误跟踪:

[信息] --------------------------------------------- ---------------------------- [INFO] Debezium Outbox 演示的 Reactor 摘要 - 构建聚合器 1.0.0-SNAPSHOT: [信息] [信息] Debezium Outbox 演示 - 构建聚合器............成功 [ 1.729 s] [信息] Debezium 发件箱演示 - 订单服务 ...... 失败 [ 43.897 秒] [信息] Debezium 发件箱演示 - 发货服务............失败 [45.137 秒] [信息] --------------------------------------------- ------------------------- [信息] 构建失败 [信息] --------------------------------------------- ------------------------- [INFO] 总时间:48.723 秒(挂钟) [INFO] 完成时间:2021-03-06T01:04:50+05:30 [信息] --------------------------------------------- ------------------------- [错误] 无法执行目标 io.quarkus:quarkus-maven-plugin:1.12.0.Final:build (default) on project outbox-order-service: 无法构建 quarkus 应用程序:io.quarkus.builder.BuildException: Build failure:由于错误,构建失败 [错误] [错误]:构建步骤 io.quarkus.deployment.pkg.steps.NativeImageBuildStep#build 引发异常:java.lang.RuntimeException:在 GRAALVM_HOME、JAVA_HOME 和系统路径中找不到 native-image。使用gu install native-image 安装它 [错误] 在 io.quarkus.deployment.pkg.steps.NativeImageBuildStep.getNativeImageExecutable(NativeImageBuildStep.java:627) [错误] 在 io.quarkus.deployment.pkg.steps.NativeImageBuildStep.getNativeImage(NativeImageBuildStep.java:343) [错误] 在 io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:112) [错误] 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法) [错误] 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) [错误] 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [错误] 在 java.base/java.lang.reflect.Method.invoke(Method.java:564) [错误] 在 io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:920) [错误] 在 io.quarkus.builder.BuildContext.run(BuildContext.java:277) [错误] 在 org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2415) [错误] 在 org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452) [错误] 在 java.base/java.lang.Thread.run(Thread.java:832) [错误] 在 org.jboss.threads.JBossThread.run(JBossThread.java:501) [错误] -> [帮助 1] [错误] 无法执行目标 io.quarkus:quarkus-maven-plugin:1.12.0.Final:build (default) on project outbox-shipment-service: 无法构建 quarkus 应用程序:io.quarkus.builder.BuildException: Build failure:由于错误,构建失败 [错误] [错误]:构建步骤 io.quarkus.deployment.pkg.steps.NativeImageBuildStep#build 抛出异常:java.lang.RuntimeException:在 GRAALVM_HOME、JAVA_HOME 和系统路径中找不到 native-image。使用gu install native-image 安装它 [错误] 在 io.quarkus.deployment.pkg.steps.NativeImageBuildStep.getNativeImageExecutable(NativeImageBuildStep.java:627) [错误] 在 io.quarkus.deployment.pkg.steps.NativeImageBuildStep.getNativeImage(NativeImageBuildStep.java:343) [错误] 在 io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:112) [错误] 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法) [错误] 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) [错误] 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [错误] 在 java.base/java.lang.reflect.Method.invoke(Method.java:564) [错误] 在 io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:920) [错误] 在 io.quarkus.builder.BuildContext.run(BuildContext.java:277) [错误] 在 org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2415) [错误] 在 org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452) [错误] 在 java.base/java.lang.Thread.run(Thread.java:832) [错误] 在 org.jboss.threads.JBossThread.run(JBossThread.java:501) [错误] -> [帮助 1] [错误] [错误] 要查看错误的完整堆栈跟踪,请使用 -e 开关重新运行 Maven。 [错误] 使用 -X 开关重新运行 Maven 以启用完整的调试日志记录。 [错误] [错误] 有关错误和可能的解决方案的更多信息,请阅读以下文章: [错误] [帮助 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException [错误] [错误] 更正问题后,您可以使用命令恢复构建 [错误] mvn -rf :outbox-order-service

【问题讨论】:

你能扩展一下那个例子中到底有什么不工作的地方吗? @Gunnar 更新了错误跟踪 【参考方案1】:

所有信息实际上都在错误信息中:

在 GRAALVM_HOME、JAVA_HOME 和系统路径中找不到本机映像。使用 gu install native-image 安装它

您正在尝试将应用程序构建为 GraalVM 本机二进制文件,但没有为此安装所需的工具。所以要么安装 native-image 工具(有关详细信息,请参阅相关的 Quarkus guide),或者改为构建为 JVM 应用程序(通过将 QUARKUS_BUILD 设置为 jvm)。

【讨论】:

以上是关于如何使用 debezium 处理发件箱模式?的主要内容,如果未能解决你的问题,请参考以下文章

Debezium 发件箱模式 |如果我们使用 debezium,架构是用 SMT/发件箱表固定的吗

Debezium 连接器发件箱转换

如何处理发票申请中的价格波动?

信用卡处理发生时等待页面

Spring Kafka 项目的 Debezium 发件箱错误

当用户订阅机器人时,应该如何处理发送 xmpp 欢迎消息(一般而言)