如何使用 Debezium Sql Server Connector for Apache Camel 实时报告事件?

How to report events in real time with Debezium Sql Server Connector for Apache Camel?

我正在尝试通过以下 Spring 引导程序使用 Debezium Sql Server Connector for Apache Camel 将更改从一个数据库复制到另一个数据库:

<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-spring-boot-starter</artifactId>
    <version>3.5.0</version>
</dependency>
<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-debezium-sqlserver-starter</artifactId>
    <version>3.5.0</version>
</dependency>

到目前为止,我只是将生成的事件记录到特定 table:

import org.apache.camel.LoggingLevel;
import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;

@Component
public class MyRoute extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("debezium-sqlserver:iwd" +
                "?databaseHostname=localhost" +
                "&databasePort=1433" +
                "&databaseServerName=iwd" +
                "&databaseDbname=iwd" +
                "&databaseUser=sa" +
                "&databasePassword=MyPassword-1" +
                "&tableWhitelist=dbo.MyTable-1" +
                "&offsetStorageFileName=./offset-file-1.dat" +
                "&databaseHistoryFileFilename=./history-file-1.dat")
        .routeId(MyRoute.class.getName() + ".DatabaseReader")
        .log(LoggingLevel.INFO, "Incoming message ${body} with headers ${headers}");
    }
}

初始化应用程序时,它会为 table 的每一行报告一个事件,问题是稍后它不会实时报告事件,例如,如果我在table.

请关注https://debezium.io/documentation/reference/1.3/connectors/sqlserver.html#setting-up-sqlserver并确保:

  • 已为数据库启用 CDC

    USE MyDB
    GO
    EXEC sys.sp_cdc_enable_db
    GO
    
  • 已为要捕获的表启用 CDC

    EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name   = N'MyTable',
    @role_name     = N'MyRole',
    GO
    
  • SQL 服务器代理是 运行

  • Debezium 用户具有读取源代码和更改表的权限