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()
本文来自博客园,作者:HumorChen99,转载请注明原文链接:https://www.cnblogs.com/HumorChen/p/18039698