带有 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 之外需要协调reqres

如何实现这样的 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 应该是 substrreplyId 应该有一个密钥? replyId 只是一些独特的 ID。删除处理程序必须将其返回。 是的,但是,在您的JSON.stringify 中,replyId 应该是键值对,对吧?

以上是关于带有 Kafka 后端的 NodeJS API的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS 和 Electron - 后端的请求承诺冻结前端的 CSS 动画

在 typescript / angular2 环境和后端的 nodejs 中设置持久会话时遇到问题

处理从 React 应用程序到 NodeJS 后端的长时间运行的发布请求时的建议

如何在 url 中传递参数,在 NodeJS 后端的 javascript 服务器端使用冒号?

CORS“允许凭据”Nodejs/Express

windows server,nginx安装,配置,运行nodeJS后端的web项目的实现,以及错误分析及解决方法