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



我正试图通过以下Spring Boot启动器使用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>

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

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}");
}
}

初始化应用程序时,它会为表中的每一行报告一个事件,问题是以后它不会实时报告事件,例如,如果我在表中插入或更新一行。

请按照https://debezium.io/documentation/reference/1.3/connectors/sqlserver.html#setting-启动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 Server代理正在运行

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

最新更新