Pulsar客户端如何控制内存使用
一、使用场景
在实际应用中,Pulsar客户端的内存使用控制是一个重要的性能优化点。假设有一个搜索类业务需要记录用户搜索请求,以便后续分析搜索热点和优化搜索效果。以下是一个简化的代码示例:
PulsarClient pulsarClient = PulsarClient.builder()
.serviceUrl("pulsar://localhost:6650")
.build();
Producer<byte[]> producer = pulsarClient.newProducer()
.topic("search-activities")
.create();
try {
MessageId messageId = producer.send(/* message payload here */);
log.debug("Search activity messageId={}", messageId);
} catch (Exception e) {
log.error("Failed to record search activity", e);
}
在这个场景中,pulsarClient
和 producer
支持复用,推荐这么做,这里只是为了演示写到了一起。producer.send
是阻塞方式发送消息,线程会卡在这里等待发送结果返回。在现实中,根据消息在实际业务中的需要,可以选择阻塞和非阻塞两种方式。例如,业务上对搜索请求事件并无强依赖,因此使用阻塞方式发消息不太适合,从性能上考虑会加长整体的搜索延迟,从稳定性上考虑会增加搜索执行过程中的不确定性。因此,可以优化为非阻塞方