以前分享過一篇線程隊列html
#分享一段線程隊列--生產者和消費者代碼#java
而後一直不知道對性能帶來了多大的改善,今天藉着對java應用的壓測,對這段代碼進行一個壓力測試,看看實際效果如何spring
環境:springboot+spring-kafkaspringboot
一個測試case是不用線程隊列來發送kafka消息,mvc
另外一個是藉助線程隊列來存放消息,在消費者端再由kafka發送出去app
這裏用了兩種 a.爲線程隊列,b爲無鎖環形隊列post
@RestController public class SampleController { @Autowired private Environment env; @Autowired private KafkaDisruptorProducer kafkaDisruptorProducer; @Autowired private KafkaMqProducer kafkaProducer; @Autowired private KafkaTemplate<Integer, String> kafkaTemplate; @RequestMapping("/testProfile") public String testProfile(){ return env.getProperty("profile"); } @RequestMapping("/test4") public String homemvckafak4() { EventMsg eventMessage=new EventMsg(); eventMessage.setEventName("test-method-->"+env.getProperty("profile")+System.currentTimeMillis()); //經過線程生產者-消費者模型來發送消息 kafkaProducer.write(eventMessage); return "kafka3==>Hello World! file.upload.stor-path"; } @RequestMapping("/test3") public String homemvckafak() { EventMsg eventMessage=new EventMsg(); eventMessage.setEventName("test-method-->"+env.getProperty("profile")+System.currentTimeMillis()); //直接走kafka發送消息 kafkaTemplate.sendDefault(JSON.toJSONString(eventMessage)); return "kafka3==>Hello World! file.upload.stor-path"; } @RequestMapping("/test") public String home() { EventMsg eventMessage=new EventMsg(); eventMessage.setEventName("test-method-->"+env.getProperty("profile")+System.currentTimeMillis()); //經過高性能無鎖隊列來發送消息 kafkaDisruptorProducer.write(eventMessage); return "kafka==>Hello World! file.upload.stor-path"; } @RequestMapping("/test2") public String homemvc() { //直接返回,實測性能做爲參照指標 return "kafka2==>Hello World! file.upload.stor-path"; } }
打開jmeter 配置好壓測參數,性能
實測test3,爲直接經過kafka發送消息測試
2.壓test4,爲線程隊列發送消息url
能夠看出使用線程隊列比不使用性能高出1000+ tps
以上爲單機測試,電腦東西開的多,會有必定的影響,不過要正常測試的話,在6k左右是正常
附kafka監控,直接使用kafka發送消息,那麼這裏顯示的message速度會在1-2K之間,若是是線程隊列,那麼在0.5-0.7之間,這裏寫入隊列和取出隊列會有相應的損耗所致