繁体   English   中英

Spring Boot Kafka EmbeddedKafka 事务

[英]Spring Boot Kafka EmbeddedKafka Transactions

嗨,我想用 kafka-test 测试 kafka 消费者方法。 我有这个方法:

@KafkaListener(topics = TOPIC_OWNER)
@Transactional("chainedKafkaTransactionManager")
public void consumeFromOwnerTopic(ConsumerRecord<String, AccessAvro> accessAvro) {
    final UUID userId = textMapper.toUUID(accessAvro.value().getUserId());
    User user = getUserFromDatabase(userId);
    userRepository.save(user);
    }
}

测试

@SpringBootTest
@ActiveProfiles("test")
@TestPropertySource(locations = "classpath:bootstrap-test.yml")
@EmbeddedKafka(partitions = 1, topics = "access-owner", bootstrapServersProperty =         
"spring.kafka.bootstrap-servers")
class AccessConsumerTest extends Specification {

@Autowired
private KafkaTemplate<String, AccessAvro> template

AccessAvro prepareAccessAvro(){
    AccessAvro accessAvro = new AccessAvro();
    accessAvro.restaurantId = UUID.randomUUID().toString()
    accessAvro.userId = UUID.randomUUID().toString()
    return accessAvro
}

def "should add role from consumed topic"(){
    given:
    sendKafkaAcces()
    expect:
    1==1
}


private ListenableFuture<SendResult<String, AccessAvro>> sendKafkaAcces() {
    template.send("access-owner", prepareAccessAvro())
}

}

在这里,我在以下情况下出现交易错误:

  • 我在测试方法中添加了注释 @Transaction("chained..."),我有关于副本的错误
  • 尝试删除“transaction-id-prefix”表单属性,我有关于 ChainedKafkaTransaction.class bc 的错误,它试图在属性中找到它
  • 当我尝试不在测试方法上添加 @Transaction 时,出现错误:在事务中运行我如何测试它?
  1. “当我尝试不在测试方法上添加 @Transaction 时,出现错误:在事务中运行”

在此处输入图片说明

No transaction is in process; possible solutions: run the template operation within the scope of a template.executeInTransaction() operation, start a transaction with @Transactional before invoking the template method, run in a transaction started by a listener container when consuming a record
  1. “我在测试方法中添加了注释 @Transaction("chained..."),我有关于副本的错误”

在此处输入图片说明

948 ERROR 5020 --- [quest-handler-7] kafka.server.KafkaApis                   : 
[KafkaApi-0] Number of alive brokers '1' does not meet the required replication factor 
'3' for the transactions state topic (configured via 
'transaction.state.log.replication.factor'). This error can be ignored if the cluster 
is starting up and not all brokers are up yet.
2020-11-10 22:18:53.023  WARN 5020 --- [           main] 
o.s.test.context.TestContextManager      : Caught exception while invoking 
'beforeTestMethod' callback on TestExecutionListener 

[org.springframework.test.context.transaction.TransactionalTestExecutionListener@5b619d14] 测试方法 [public void com.przemarcz.auth.service.AccessConsumerTest.$spock_feature_0_0()] 和测试实例 [com.przemarcz.auth.service.AccessConsumerTest@ 63c31664]

org.springframework.transaction.CannotCreateTransactionException: Could not create 
Kafka transaction; nested exception is 
org.apache.kafka.common.errors.TimeoutException: Timeout expired after 
60000milliseconds while awaiting InitProducerId; nested exception is 
org.springframework.transaction.CannotCreateTransactionException: Could not create 
Kafka transaction; nested exception is 
org.apache.kafka.common.errors.TimeoutException: Timeout expired after 
60000milliseconds while awaiting InitProducerId
  1. “尝试删除“transaction-id-prefix”表单属性,我有关于 ChainedKafkaTransaction.class bc 的错误,它试图在属性中找到它

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.kafka.transaction.KafkaTransactionManager<java.lang.Object, java.lang.Object>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM