带有 Kafka 后端的 NodeJS API
Posted
技术标签:
【中文标题】带有 Kafka 后端的 NodeJS API【英文标题】:NodeJS API with Kafka back-end 【发布时间】:2020-06-05 20:54:07 【问题描述】:我想构建一个基于 NodeJS 的 API,它以 pub-sub 范式为后盾,例如卡夫卡。这是我想做的事情的骨架。
const express = require('express')
const serverApp = express()
serverApp.get('/book/:bookId', (req, res) =>
producer.send(JSON.stringify(
action: 'get',
message: req.params.bookId
))
consumer.on('message', (data) =>
res.status(200).send(JSON.parse(data))
)
)
使用上面的选项,第一次调用有效,但随后的调用继续失败,并显示ERR_HTTP_HEADERS_SENT
。
将consumer.on
保留在serverApp.get
之外需要协调req
和res
。
如何实现这样的 API?
【问题讨论】:
您每次都需要退订... 【参考方案1】:例如作为骨架
const express = require('express')
const serverApp = express()
const responses = Object.create(null);
consumer.on('message', (data) =>
const result = JSON.parse(data)
const res = responses[result.replyId]
res.status(200).send(result)
);
serverApp.get('/book/:bookId', (req, res) =>
const replyId = Math.random().toString(36).substr(2);
responses[replyId] = res;
producer.send(JSON.stringify(
action: 'get',
replyId,
message: req.params.bookId
))
)
【讨论】:
当我尝试这个时,sunstr
应该是 substr
和 replyId
应该有一个密钥?
replyId
只是一些独特的 ID。删除处理程序必须将其返回。
是的,但是,在您的JSON.stringify
中,replyId
应该是键值对,对吧?以上是关于带有 Kafka 后端的 NodeJS API的主要内容,如果未能解决你的问题,请参考以下文章
NodeJS 和 Electron - 后端的请求承诺冻结前端的 CSS 动画
在 typescript / angular2 环境和后端的 nodejs 中设置持久会话时遇到问题
处理从 React 应用程序到 NodeJS 后端的长时间运行的发布请求时的建议