@Bean public KafkaMessageListenerContainer<String, String> container( ConsumerFactory<String, String> consumerFactory, ConfigProperties config) { ContainerProperties containerProperties = new ContainerProperties(config.getTopic()); containerProperties.setMessageListener(listener()); return new KafkaMessageListenerContainer<>(consumerFactory, containerProperties); }
private KafkaMessageListenerContainer<Long, Seed> runContainer(String topic, MessageListener<Long, Seed> listener) { ContainerProperties containerProps = new ContainerProperties(topic); containerProps.setMessageListener(listener); KafkaMessageListenerContainer<Long, Seed> tmp = createContainer(containerProps); tmp.setBeanName(topic + "message-listener"); return tmp; }
@Bean public KafkaMessageListenerContainer<String, String> container( ConsumerFactory<String, String> consumerFactory, ConfigProperties config) { ContainerProperties containerProperties = new ContainerProperties(config.getTopic()); containerProperties.setMessageListener(listener()); containerProperties.setAckMode(AckMode.MANUAL_IMMEDIATE); return new KafkaMessageListenerContainer<>(consumerFactory, containerProperties); }
@Bean(name = "messageListenerContainer") public ConcurrentMessageListenerContainer<String, PublishedEventWrapper> messageListenerContainer() { Map<String, Object> consumerProperties = eventApisConfiguration.getEventBus().buildConsumerProperties(); consumerProperties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false); consumerProperties.put(ConsumerConfig.METADATA_MAX_AGE_CONFIG, 3000); DefaultKafkaConsumerFactory<String, PublishedEventWrapper> consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProperties, new StringDeserializer(), new JsonDeserializer<>(PublishedEventWrapper.class)); ContainerProperties containerProperties = new ContainerProperties(Pattern.compile(eventTopicRegexStr)); containerProperties.setMessageListener(new MultipleEventMessageListener(eventMessageListeners)); containerProperties.setAckMode(AbstractMessageListenerContainer.AckMode.BATCH); ConcurrentMessageListenerContainer<String, PublishedEventWrapper> messageListenerContainer = new ConcurrentMessageListenerContainer<>(consumerFactory, containerProperties); messageListenerContainer.setBeanName("emon-events"); return messageListenerContainer; }
@Bean(name = "operationListenerContainer") public ConcurrentMessageListenerContainer<String, Operation> operationListenerContainer() { Map<String, Object> consumerProperties = eventApisConfiguration.getEventBus().buildConsumerProperties(); consumerProperties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false); DefaultKafkaConsumerFactory<String, Operation> operationConsumerFactory = new DefaultKafkaConsumerFactory<>(consumerProperties, new StringDeserializer(), new JsonDeserializer<>(Operation.class)); ContainerProperties containerProperties = new ContainerProperties(Operation.OPERATION_EVENTS); containerProperties.setMessageListener(new MultipleEventMessageListener(eventMessageListeners)); containerProperties.setAckMode(AbstractMessageListenerContainer.AckMode.BATCH); ConcurrentMessageListenerContainer<String, Operation> operationListenerContainer = new ConcurrentMessageListenerContainer<>(operationConsumerFactory, containerProperties); operationListenerContainer.setBeanName("emon-operations"); return operationListenerContainer; }
containerProps.setMessageListener((AcknowledgingMessageListener<Integer, String>) (message, ack) -> { LOGGER.info("Receiving: " + message); try {
@Test public void testAutoCommit() throws Exception { System.out.println("Start auto"); ContainerProperties containerProps = new ContainerProperties("topic1", "topic2"); final CountDownLatch latch = new CountDownLatch(4); containerProps.setMessageListener(new MessageListener<Integer, String>() { @Override public void onMessage(ConsumerRecord<Integer, String> message) { System.out.println("received: " + message); latch.countDown(); } }); KafkaMessageListenerContainer<Integer, String> container = createContainer(containerProps); container.setBeanName("testAuto"); container.start(); Thread.sleep(1000); // wait a bit for the container to start KafkaTemplate<Integer, String> template = createTemplate(); template.setDefaultTopic("topic1"); template.sendDefault(0, "foo"); template.sendDefault(2, "bar"); template.sendDefault(0, "baz"); template.sendDefault(2, "qux"); template.flush(); assertTrue(latch.await(60, TimeUnit.SECONDS)); container.stop(); System.out.println("Stop auto"); }