我正在使用spring-boot-starter-parent
版本1.5.0.RELEASE
,spring-kafka
版本1.0.0.RELEASE
和spring-kafka-test
版本1.0.0.RELEASE
的应用程序中使用来自{ {1}}集群。我为使用Kakfa 0.9
的消费者进行了单元测试,但是由于经纪人端口是随机拾取的,因此它失败了。有没有一种方法可以设置该代理属性而不更改版本?还是我应该使用哪个版本以便不破坏任何内容?
这是KafkaEmbedded
和KafkaListener
的代码。
KafkaConsumerTest
@Service
public class Listener {
private static final Logger logger = LoggerFactory.getLogger(Listener.class);
private CountDownLatch latch = new CountDownLatch(1);
@KafkaListener(topics = "topic", group = "group", containerFactory = "kafkaListenerContainerFactory")
public void consumeClicks(@Payload String msg, @Header(KafkaHeaders.RECEIVED_PARTITION_ID) Integer partition, @Header(KafkaHeaders.OFFSET) Integer offset, Acknowledgment ack) throws Exception {
logger.info(msg);
latch.countDown();
ack.acknowledge();
}
public CountDownLatch getLatch() {
return latch;
}
}
答案 0 :(得分:0)
请在引导1.5中使用spring-kafka 1.3.9;不再支持早期版本。当前的引导1.5.x版本是1.5.21。
@ClassRule
public static KafkaEmbedded embeddedKafka = new KafkaEmbedded(1, true, TEST_TOPIC);
static {
embeddedKafka.setKafkaPorts(1234);
}
setKafkaPorts
从1.3开始可用。
但是,您在测试中正确使用了分配的随机端口
Map<String, Object> senderProps = KafkaTestUtils.senderProps(embeddedKafka.getBrokersAsString());
要使kafka侦听器连接到嵌入式代理,可以使用。
System.setProperty("spring.kafka.bootstrap-servers", embeddedKafka.getBrokersAsString());
答案 1 :(得分:0)
我认为,在加载应用程序上下文进行测试时,正在创建两个类型为(ProducerFactory and KafkaTemplate)
的bean,一个是使用原始配置,第二个是使用测试配置,请尝试对此使用不同的配置文件进行测试application-test.yml
并添加Bean覆盖属性
spring.main.allow-bean-definition-overriding to true.
因此它将用测试Bean覆盖应用程序Bean,并在测试中将ProducerFactory
和KafkaTemplate
声明为与应用程序中相同名称的Bean