Node.js中的HTTP/2 POST请求

Node.js中的HTTP/2 POST请求,node.js,apache-kafka-streams,http2,ksqldb,Node.js,Apache Kafka Streams,Http2,Ksqldb,如何在Node.js中执行HTTP/2 post请求 curl --http2 "POST" "http://hostname:8088/query-stream" -d $'{"sql": "SELECT * FROM `USERPROFILE` EMIT CHANGES;", "properties": {"ksql.streams.auto.offset.reset":

如何在Node.js中执行HTTP/2 post请求

curl --http2 "POST" "http://hostname:8088/query-stream" -d $'{"sql": "SELECT * FROM `USERPROFILE` EMIT CHANGES;", "properties": {"ksql.streams.auto.offset.reset": "earliest" } }'
enter code here

您为HTTP/2请求提供了什么Node.js模块?

这是一个类,可以将其作为服务处理,并带有发布者和侦听器函数

export class KafkaService {

    opts = { brokers: 'localhost:9092', groupId: '0' };
    kafkaObservable = require('kafka-observable');
    static instance = null;
    static getInstance() {
        if(!KafkaService.instance){
            KafkaService.instance = new KafkaService();
        }
        return KafkaService.instance;
    }

    publishMessage(topic, messages) {
        this.kafkaObservable.toTopic(topic, messages, this.opts).subscribe(x => x);
    }

    consumerListener(topic) {
        return this.kafkaObservable.fromTopic(topic, this.opts)
        .map(({message}) => message.value.toString('utf8'));;
    }

}
在你的应用程序中,你可以使用下面的代码在我的程序中使用套接字发送和接收即时消息,但你可以不使用套接字

import {ItemBet} from "./src/handlers/item-bet.js";
import express from "express"
import { KafkaService } from "./src/services/kafka-service.js";

var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);

app.use(express.static('./public'));

const kafka = KafkaService.getInstance();

io.on('connection', function(socket){    
    console.log("Someone is been connected in a socket");

    socket.on('purchase-message', function(data){
        console.log('Shopping Card, purchase-message', data);
        console.log('Shopping Card, kafka-producer-message');
        console.log('Shopping Card, SOCKET', socket.id);

        kafka.publishMessage('proceed-transaction', [{socketId: socket.id, data: data}]);     
    });
});


kafka.consumerListener('transaction-response')
.map( res => JSON.parse(res))
.subscribe(res => {        
    console.log('Shopping Card, kafka-customer, transaction-response', res);
    io.to(res.socketId).emit('transaction-response', res.data);
});

server.listen(1024);

感谢您的回答,但我的问题与ksqDB中的卡夫卡流有关,而不是“连接卡夫卡”主题。我想做一个http2请求,比如

curl--http2“POST”主机名:8088/查询流“-d$'{“sql”:“选择

  • 从USERPROFILE发出更改;“,”属性“:{“ksql.streams.auto.offset.reset”:“最早的”}”

我已经解决了这个问题。如果有人需要拐杖来使用以下代码

const http2 = require('http2');
const http2PostRequest = (url, path, data) => new Promise((resolve, reject) => {
    console.log('url => ', url);
    console.log('data => ', data);

    const client = http2.connect(url);
    console.log(' http2.constants.HTTP2_METHOD_POST => ', http2.constants.HTTP2_METHOD_POST)
    console.log(' http2.constants.HTTP2_PATH => ', `${path}`);

    const req = client.request({
        [http2.constants.HTTP2_HEADER_SCHEME]: "https",
        'Content-Type': 'application/json',
        'Content-Length': data.length,
        ":method": "POST",
        ":path": path
    });
    req.setEncoding('utf8');
    req.on('response', (headers, flags) => {
        console.log('headers => ', headers);
        console.log('flags => ', flags);

        req.on('data', d => {
            console.log('data => ', JSON.parse(d));
        })

        req.on('close', () => {
            try {
                resolve(data);
            } catch (e) {
                resolve(e);
            }
        })
        req.on('error', error => {
            reject(error);
        })
    });
    req.write(data);
    req.end();
});

const data = {
    "sql": "SELECT * FROM `FOO_02` EMIT CHANGES;",
    "properties": {"ksql.streams.auto.offset.reset": "earliest"}
};
http2PostRequest(
    "http://localhost:8088",
    "/query-stream",
    JSON.stringify(data)
).then((res) => {
    console.log('res => ', res);
})
http2 API在此: