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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~