效果图
- 生产者
- 消费者
代码
- 生产者
/** * 生产者 * author:chen * date:2020.11.12 */ //引入kafka-node const kafka = require('kafka-node'); //创建连接 let generateKafkaConnection= function(host){ return new Promise((resolve,reject)=>{ try{ let client = new kafka.KafkaClient({'kafkaHost':host}); resolve(client) }catch (e) { reject(e) } }) } //创建生产者 let generateProducer= function(client){ return new Promise((resolve,reject)=>{ try{ let producer = new kafka.Producer(client); producer.on('ready', function(){ resolve(producer) }); producer.on('error', function(err){ reject(e) }); producer.sendMessage=(payloads)=>{ return new Promise((resolve1 => { producer.send(payloads,()=>{ resolve1() }) })) } }catch (e) { reject(e) } }) } module.exports={ generateKafkaConnection:generateKafkaConnection, generateProducer:generateProducer } //测试函数 async function main(){ console.log('尝试建立连接') let client=await generateKafkaConnection("192.168.108.129:9092") // let client=await generateKafkaConnection("192.168.108.129:9092") console.log('连接建立成功') console.log('尝试建立生产者') let producer=await generateProducer(client) console.log('生产者建立成功') console.log('尝试发送消息') //消息 //生成指定数量消息 // for(let i=0;i<100;i++){ // let payloads = [ // { topic: 'broadcast', messages: 'hi '+new Date().toLocaleString(), partition: 0 } // ]; // await producer.sendMessage(payloads) // console.log('成功发送第',i,'条消息') // } //定时生成消息 let deal_id=1000000001 let price=14201 let index=setInterval(async ()=>{ let random=Math.random() let randomPrice=price if(random>0.5){ randomPrice+=random }else{ randomPrice-=random } randomPrice=randomPrice.toFixed(2) let amount=Math.floor(random*100) let payloads = [ { topic: 'test_topic', messages: "Hi,Kafka user!", partition: 0 } ]; await producer.sendMessage(payloads) console.log('生产者成功发送消息 ',JSON.stringify(payloads)) },1500) } main()
- 消费者
/** * 消费者 * 运行代码:node consumer.js * author:chen * date:2020.11.12 */ //引入kafka-node const kafka = require('kafka-node') //创建kafka连接 let generateKafkaConnection=function(host){ return new Promise(((resolve, reject) => { try{ let client = new kafka.KafkaClient({'kafkaHost':host}) resolve(client) }catch (e) { reject(e) } })) } //创建消费者 let generateComsumer=function (client,topic,messageHandler) { return new Promise(((resolve, reject) => { try{ let comsumer=new kafka.Consumer(client,topic,{autoCommit: true}) if(messageHandler instanceof Function) { comsumer.on('message',messageHandler) } else { comsumer.on('message',(message)=>{ console.log("消费者收到消息 "+message.value); }) } resolve(comsumer) }catch (e) { reject(e) } })) } module.exports={ generateKafkaConnection:generateKafkaConnection, generateComsumer:generateComsumer } //测试函数 async function main(){ let client=await generateKafkaConnection('192.168.108.129:9092') let topic=[ {'topic': 'test_topic', 'partition': 0} ] //建立消费者,(messageHandler不写默认打印消息) let comsumer=await generateComsumer(client,topic,(message)=>{ console.log("消费者收到消息 "+message.value); }) } main()