我是Clojure世界中的新手。我的宠物项目是写卡夫卡的消费者/生产者。 www中有很多话题,但我遇到了误会。
有一个密码
function tester(prevState, props) {
return {
...prevState,
data: 'new Data',
};
}
class App extends Component {
constructor() {
super();
this.state = {
data: '',
};
}
componentDidMount() {
this.setState(tester);
}
render() {
return (
<div>{this.state.data}</div>
);
}
}
我只想通过(ns producer
(:require [clojure.tools.logging :as log])
(:import (java.util Properties)
(org.apache.kafka.common.serialization StringSerializer)
(org.apache.kafka.clients.producer KafkaProducer ProducerRecord))
(:gen-class))
(defn create-kafka-producer [server]
(let [producer-props {
"value.serializer" StringSerializer
"key.serializer" StringSerializer
"bootstrap.servers" server }]
(KafkaProducer. producer-props)))
(defn send-single-message [producer topic-name record]
(.send producer (ProducerRecord. topic-name (str "Value: " (.value record)))))
(defn -main []
(def svr "localhost:8084")
(def producer (create-kafka-producer svr))
(send-single-message producer "Test msg"))
函数将一些味精传递到kafka中。但是,正如您在代码示例中看到的那样,使用的是(.value记录),当我尝试传递“ Test msg”字符串时,它崩溃了,并显示了随后的错误
send-single-message
我知道这是因为我传递了没有Exception in thread "main" java.lang.IllegalArgumentException: No matching field found: value for class java.lang.String
的字符串对象
那么,如何解决这个问题呢?提前致谢
ps。我尝试通过其他结构,但没有结果或其他错误
答案 0 :(得分:1)
正如您所指出的,该错误是因为您试图获取所传递对象的value
字段,但是您正在传递的字符串中没有value
字段。
检查ProducerRecord
的构造函数签名,它接受类型为V
的泛型参数(就Clojure而言,这只是一个Object
)。我只需要直接传递String并忽略value
字段访问即可。