Kafka NodeJS测试工具类

效果图

安装kafka参见我的教程https://blog.csdn.net/HumorChen99/article/details/109726939

  • 生产者
    在这里插入图片描述
  • 消费者
    在这里插入图片描述

代码

  • 生产者
/**
 * 生产者
 * 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()

posted @ 2020-11-17 16:23  HumorChen99  阅读(2)  评论(0编辑  收藏  举报  来源