Em có dùng @KafkaListener để nhận tin nhắn sau đó gửi gmail (tốn nhiều thời gian) cho user.Em dùng đa luồng cho chức năng này để giải quyết vấn đề treo thread khi xử lý trong listener (do listener mặc định có 1 thread )
Em có 2 lựa chọn :
- Như em nói ở trên dùng @Async và ThreadPool
- Cấu hình số luồng của listener thông qua setConcurrency (như bên dưới)
<span>@Bean</span> public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<<span>String</span>, <span>String</span>>> kafkaListenerContainerFactory() { ConcurrentKafkaListenerContainerFactory<<span>String</span>, <span>String</span>> <span>factory</span> = <span>new</span> ConcurrentKafkaListenerContainerFactory<>(); <span>factory</span>.setConsumerFactory(consumerFactory()); <span>factory</span>.setConcurrency(<span>5</span>); ...... }
Anh cho em hỏi 2 cách này có em nên dùng cách nào hiệu quả hơn và vì sao ạ hoặc n ếu anh có cách nào hay hơn thì mong anh recommend cho em với ạ.