阅读kafka的主题与反应

时间:2015-09-14 17:09:01

标签: node.js reactjs apache-kafka

我首先要说的是,如果这个问题看起来很通用,我很抱歉,但是我很难解决这个问题。所以我会在这里试一试。

我想用反应来构建一个kafka主题的使用者,所以每当我的主题中有新消息时,它就会呈现我不知道类似网格的东西。

我已经拥有了消费者的代码:

var kafka = require('kafka-node'),
Consumer = kafka.Consumer,
client = new kafka.Client(),
consumer = new Consumer(
    client,
    [
        { topic: 'logs', partition: 0 }
    ],
    {
        autoCommit: false
    }
),
Producer = kafka.Producer,
client = new kafka.Client(),
producer = new Producer(client);

consumer.on('message', function (message) {
    console.log(message);
});

只要有新消息,就会调用消费者的“on”事件。

但是我无法通过反应来看待它。

我要做任何事情,教程,文章,任何事情。

感谢。

2 个答案:

答案 0 :(得分:3)

以下是您可以做的一个示例。实质上,让呈现消息信息的组件观察kafka consumer并在组件的状态中设置该消息。然后,组件将使用状态中的新消息进行呈现(任何时候调用setState,都会导致组件自行更新)。

这假设您要显示消息列表,而consumer.on回调提供需要添加到列表中的单个消息。

var MessageDetails = React.createClass({
    //create a render function for this to render the details about a message
});

var MessageDisplay = React.createClass({
    getInitialState: function() {
        return { messages: [] };
    },

    onComponentDidMount: function() {
        consumer.on('message', function (message) {
            // This updates the state so component will re-render
            var messageList = this.state.messages;
            messageList.push(message);
            this.setState({messages: messageList});
        }.bind(this));
    },

    onComponentWillUnmount: function() {
        // Unsubscribe from the consume here.
    },

    render: function() {
        var messageList = this.state.messages.map(function(message) {
            return (<MessageDetails id={message.id} etc. />);
        });
        return (
          <div className="commentBox">
              {messageList}
          </div>
        );
    }
});

答案 1 :(得分:0)

您应该使用https://github.com/Effyis/kafka2websockethttps://github.com/Microsoft/kafka-proxy-ws之类的websocket Kafka代理,因为AFAIK尚无兼容浏览器的客户端。 之后,您将可以通过websockets与Kafka进行交互