我有kafka生产者,每次发布带有初始化连接的消息。当服务器启动时,我厌倦了创建连接;当服务器厌倦了发布消息时,我厌倦了使用相同的连接-消息流达到数十亿。在某个时间点之后,由于与kafka经纪人的许多开放连接,服务器关闭。以下是服务器上使用的代码段。知道如何在服务器启动期间为生产者创建kafka连接并在需要发布消息时继续使用该连接,或者创建一些“ x”连接并继续使用“ x”连接中的连接
class KafkaProduce{
private var kafkaProducer:KafkaProducer = new KafkaProduer[String,String](getProeperties)
@volatile private var isClosed = false
def close:Unit={
if(!isClosed){
producer.close
isClosed=true
}
def instance():KafkaProducer[String,String]={
this.synchronized{
if(!isClosed) producer
else{producer = new KafkaProducer[String,String](getProperties)}
}
}
producer
}
def getProperties:Properties = {
val properties = new Properties()
properties.put("bootstrap.servers","")
properties.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer")
properties.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer")
properties.put("acks",0.toString)
properties.put("producer.type","sync")
}
def writeMessagetoKafka(message:String):Unit{
try{
val sendProducer = instance
val record = new ProducerRecord[String,String](topic,message)
sendProducer.send(record)
}
catch{
case ee:Exception =>
val eWriter = new StringWriter
ee.printStackTrace(new PrintWriter(eWriter))
}
}
}
抽象类中的函数,它调用上面的生产者类
public abstract Calling{
/* some methods*/
private void sendMessage(){
KafkaProduce producer = new KafkaProduce();
producer.writeMessagetoKafka("hello");
}
}
kafka客户端版本:2.4.1 Scala版本:2.12.6 服务器:weblogic 12c 无法在我们组织中的服务器上使用weblogic OSB服务