<int-kafka:zookeeper-connect id="zookeeperConnect" zk-connect="${kafka.zookeeper.connect}" zk-connection-timeout="6000" zk-session-timeout="400" zk-sync-time="200" /> <bean id="zookeeperConfiguration" class="org.springframework.integration.kafka.core.ZookeeperConfiguration"> <constructor-arg name="zookeeperConnect" ref="zookeeperConnect" /> </bean> <bean id="defaultConnectionFactory" class="org.springframework.integration.kafka.core.DefaultConnectionFactory"> <constructor-arg name="configuration" ref="zookeeperConfiguration" /> </bean> <bean id="kafkaTemplate" class="org.springframework.integration.kafka.core.KafkaTemplate"> <constructor-arg name="connectionFactory" ref="defaultConnectionFactory" /> </bean>
package com.vti.test;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.integration.kafka.core.FetchRequest;
import org.springframework.integration.kafka.core.KafkaMessage;
import org.springframework.integration.kafka.core.KafkaMessageBatch;
import org.springframework.integration.kafka.core.KafkaTemplate;
import org.springframework.integration.kafka.core.Partition;
import org.springframework.integration.kafka.core.Result;
import org.springframework.integration.kafka.serializer.common.StringDecoder;
import org.springframework.integration.kafka.util.MessageUtils;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:beans.xml" })
public class KafkaTemplateTest {
@Resource
private KafkaTemplate kafkaTemplate;
@Test
public void receive() {
String topic = "test";
long offset = 0;
int max = 1000;
Collection<Partition> partitions = kafkaTemplate.getConnectionFactory().getPartitions(topic);
while (partitions.iterator().hasNext()) {
Partition partition = partitions.iterator().next();
Result<KafkaMessageBatch> receive = kafkaTemplate
.receive(Collections.singleton(new FetchRequest(partitions.iterator().next(), offset, max)));
List<KafkaMessage> messages = receive.getResult(partition).getMessages();
if (messages.size() > 0) {
for (KafkaMessage kafkaMessage : messages) {
String msg = MessageUtils.decodePayload(kafkaMessage, new StringDecoder());
offset = kafkaMessage.getMetadata().getNextOffset();
System.out.println(msg);
}
} else {
try {
Thread.sleep(3*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
continue;
}
}
}
}