Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用Spingboot应用程序配置带有Camel Kafka的事务_Java_Spring Boot_Apache Kafka_Apache Camel - Fatal编程技术网

Java 无法使用Spingboot应用程序配置带有Camel Kafka的事务

Java 无法使用Spingboot应用程序配置带有Camel Kafka的事务,java,spring-boot,apache-kafka,apache-camel,Java,Spring Boot,Apache Kafka,Apache Camel,我目前正在创建一个Springboot应用程序,它将使用来自Kafka主题的消息,并在处理后将写回另一个主题。我使用CAMEL进行集成 My Route looks like this : onException(IllegalArgumentException.class).maximumRedeliveries(4); from("kafka:CDC-GEXPUAT-CUSTOMER") .id("Came

我目前正在创建一个Springboot应用程序,它将使用来自Kafka主题的消息,并在处理后将写回另一个主题。我使用CAMEL进行集成

My Route looks like this :
    onException(IllegalArgumentException.class).maximumRedeliveries(4); 
        

from("kafka:CDC-GEXPUAT-CUSTOMER")
             .id("CamelRouteCustomer_1")
             .**transacted**()
             .choice()
                .when(simple("${body} contains 'GEXPUAT.CUSTOMER'" ))
                    .unmarshal().json(JsonLibrary.Jackson, CustomerWrapper.class)
                    .process(customerProcessor)
                .otherwise()
                    .log("${body}")                 
             .end()
             .to("seda:aggregate_1");
在路由中使用.Transact()时,出现以下错误: org.apache.camel.NoSuchBeanException:在类型为PlatformTransactionManager的注册表中找不到bean

@Configuration
public class CommonBean {
    
     @Bean
        SpringTransactionPolicy springTransactionPolicy() throws Exception {
            SpringTransactionPolicy txRequired = new SpringTransactionPolicy();
            txRequired.setTransactionManager(transactionManager());
            txRequired.setPropagationBehaviorName("PROPAGATION_REQUIRED");
            return txRequired;
        }

        @Bean
        public DefaultKafkaProducerFactory<byte[], byte[]> producerFactory() {
            DefaultKafkaProducerFactory<byte[], byte[]> defaultKafkaProducerFactory = new DefaultKafkaProducerFactory<byte[], byte[]>(
                    kafkaConfigs());
            // enable transaction manager
            defaultKafkaProducerFactory.setTransactionIdPrefix(transactionIdPrefix);
            return defaultKafkaProducerFactory;
        }


        @Bean
        @Primary
        public ChainedKafkaTransactionManager<byte[], byte[]> transactionManager() throws Exception {
            return new ChainedKafkaTransactionManager<>(kafkaTransactionManager());
        }

        @Bean
        public PlatformTransactionManager kafkaTransactionManager() {
            KafkaTransactionManager<byte[], byte[]> kafkaTransactionManager = new KafkaTransactionManager<>(producerFactory);
            kafkaTransactionManager.setTransactionSynchronization(AbstractPlatformTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION);
            kafkaTransactionManager.setRollbackOnCommitFailure(true);
            return kafkaTransactionManager;
        }

}
因此,我现在尝试创建一个配置类来定义TransactionManager

@Configuration
public class CommonBean {
    
     @Bean
        SpringTransactionPolicy springTransactionPolicy() throws Exception {
            SpringTransactionPolicy txRequired = new SpringTransactionPolicy();
            txRequired.setTransactionManager(transactionManager());
            txRequired.setPropagationBehaviorName("PROPAGATION_REQUIRED");
            return txRequired;
        }

        @Bean
        public DefaultKafkaProducerFactory<byte[], byte[]> producerFactory() {
            DefaultKafkaProducerFactory<byte[], byte[]> defaultKafkaProducerFactory = new DefaultKafkaProducerFactory<byte[], byte[]>(
                    kafkaConfigs());
            // enable transaction manager
            defaultKafkaProducerFactory.setTransactionIdPrefix(transactionIdPrefix);
            return defaultKafkaProducerFactory;
        }


        @Bean
        @Primary
        public ChainedKafkaTransactionManager<byte[], byte[]> transactionManager() throws Exception {
            return new ChainedKafkaTransactionManager<>(kafkaTransactionManager());
        }

        @Bean
        public PlatformTransactionManager kafkaTransactionManager() {
            KafkaTransactionManager<byte[], byte[]> kafkaTransactionManager = new KafkaTransactionManager<>(producerFactory);
            kafkaTransactionManager.setTransactionSynchronization(AbstractPlatformTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION);
            kafkaTransactionManager.setRollbackOnCommitFailure(true);
            return kafkaTransactionManager;
        }

}
@配置
公共类公共bean{
@豆子
SpringTransactionPolicy SpringTransactionPolicy()引发异常{
SpringTransactionPolicy txRequired=新的SpringTransactionPolicy();
txRequired.setTransactionManager(transactionManager());
txRequired.setPropagationBehaviorName(“需要传播”);
返回txRequired;
}
@豆子
公共默认KafkaProducerFactory producerFactory(){
DefaultKafkaProducerFactory DefaultKafkaProducerFactory=新建DefaultKafkaProducerFactory(
卡夫卡(图());
//启用事务管理器
defaultKafkaProducerFactory.setTransactionIdPrefix(transactionIdPrefix);
返回defaultKafkaProducerFactory;
}
@豆子
@初级的
public ChainedKafkaTransactionManager transactionManager()引发异常{
返回新的ChainedKafkaTransactionManager(kafkaTransactionManager());
}
@豆子
公共平台交易管理器kafkaTransactionManager(){
KafkaTransactionManager KafkaTransactionManager=新的KafkaTransactionManager(producerFactory);
kafkaTransactionManager.setTransactionSynchronization(AbstractPlatformTransactionManager.SYNCHRONIZATION在实际事务上);
kafkaTransactionManager.setRollbackOnCommitFailure(true);
返回kafkaTransactionManager;
}
}
但是现在我发现编译错误并且找不到类:

  • SpringTransactionPolicy
  • DefaultKafkaProducerFactory
  • 连锁KafkatraTransactionManager
  • 卡夫卡塔拉行动经理
  • 我不确定需要在pom.xml中添加什么依赖项,以便在Camel Spingboot项目中配置KafkaTransactionManager

    目前POM.XML看起来是这样的 我已经对xml文件的某些部分进行了注释
    
    4.0.0
    org.springframework.boot
    spring启动程序父级
    2.4.5
    com.surajit.camel
    camel-microservice-a
    0.0.1-快照
    骆驼计划
    用于Spring Boot的Camel项目
    8.
    3.7.0
    2.3.3.2发布
    Hoxton.SR8
    org.springframework.boot
    弹簧靴起动器执行器
    org.springframework.boot
    SpringBootStarterWeb
    org.apache.camel.springboot
    驼形弹簧靴起动器
    ${camel.version}
    org.apache.camel.springboot
    camel-activemq启动器
    ${camel.version}
    org.apache.camel.springboot
    骆驼卡夫卡曲
    ${camel.version}
    org.apache.camel.springboot
    骆驼杰克逊起动器
    ${camel.version}
    org.springframework.boot
    弹簧靴开发工具
    运行时
    真的
    org.springframework.boot
    弹簧起动试验
    测试
    org.springframework.boot
    springbootmaven插件
    
    我可以通过在pom.xml中添加以下内容来解决问题

    <dependency>
              <groupId>org.springframework.kafka</groupId>
              <artifactId>spring-kafka</artifactId>
             <!--  <version>2.2.14.RELEASE</version> -->
              <version>2.7.0</version>
            </dependency>
    

    现在按路线正确地开始

    卡夫卡客户端当前使用的版本是什么?你能分享你的POM/Gradle文件吗?添加POM文件。我使用了kafka客户端版本0.11,但没有解决依赖关系。当前已在pom.xml文件中注释掉。您可能希望尝试使用
    spring kafka
    ,并确保您的初学者父版本和引导版本兼容
    Added the following in the application.properties
    spring.kafka.producer.transaction-id-prefix="producer"
    spring.kafka.producer.bootstrap-servers=xxx.xxx.xxx.xxx:9092
    spring.kafka.jaas.enabled=false