我目前在我的应用程序中使用的是Kafka节点,但是我无法将其连接到我之前提出的Kafka代理中。
首先,我用wurstmeister / kafka docker映像启动kafka代理。我还用jplock / zookeeper图像来调动Zookeeper。 我会使用wurstmeister / kafka图像自动创建一个带有环境变量的主题。像这样:
zookeeper:
image: jplock/zookeeper
ports:
- "2181:2181"
networks:
- bitmex_backend
kafka:
image: wurstmeister/kafka:latest
ports:
- "9092:9092"
depends_on:
- zookeeper
environment:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENERS: "PLAINTEXT://:9092"
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_CREATE_TOPICS: "Topic1:1:1"
networks:
- bitmex_backend
我通过列出来自kafka的所有主题来验证容器已启动,该主题返回正确的主题编号和名称。
然后我想调出一个生产者并在调用端点时对其进行验证,所以我这样做:
// Import the WebFramework for routing
const Koa = require('koa')
const route = require('koa-route')
var kafka = require('kafka-node');
client = new kafka.Client(),
producer = new kafka.Producer(client);
// TODO : Generate a position/history endpoint
module.exports = async () => {
const app = new Koa()
// Retrive all the open positions from all the bots in the system
app.use(route.get('/open', async (ctx) => {
producer.on('ready', function () {
console.log('Producer is ready');
});
producer.on('error', function (err) {
console.log('Producer is in error state');
console.log(err);
})
// Response
ctx.status = 200
ctx.body = {
data : "success",
}
}))
return app
此代码运行时没有错误,但也没有输出。当我检查日志时,没有console.log的端点被正确调用,以证明端点已加载。
任何想法或指针都非常受欢迎,因为我已经坚持了一段时间。