Menghantar Mesej dengan KafkaTemplate
Gunakan KafkaTemplate Spring untuk menghantar mesej secara terprogram ke topik Kafka, termasuk pendekatan segerak dan tak segerak.
Menghantar Mesej dengan KafkaTemplate ialah pelajaran Spring Boot 4 Lanjutan: Seni Bina Dipacu Peristiwa (Kafka) percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Spring Boot 4 Lanjutan: Seni Bina Dipacu Peristiwa (Kafka), dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Spring Boot 4 Lanjutan: Seni Bina Dipacu Peristiwa (Kafka) merangkumi sejumlah 4 pelajaran.
Kenali KafkaTemplate Spring
Selamat datang ke topik penghantaran mesej dengan Spring Boot dan Kafka! Teras penghantaran mesej ialah KafkaTemplate Spring.
- Ia memudahkan interaksi dengan Kafka.
- Ia mengendalikan pengurusan sambungan dan pensirian.
- Ia membolehkan anda menghantar mesej ke mana-mana topik Kafka dengan mudah.
Anggaplah ia sebagai alat utama anda untuk menghasilkan peristiwa.
Menyuntik KafkaTemplate dalam Spring
Untuk menggunakan KafkaTemplate, anda hanya perlu menyuntikkannya ke dalam komponen Spring anda (seperti perkhidmatan atau pengawal). Spring Boot mengkonfigurasikannya secara automatik untuk anda, dengan syarat anda mempunyai kebergantungan spring-kafka.
Anda hanya perlu mengisytiharkannya, dan Spring akan menguruskan selebihnya!
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;
@Service
public class MyProducerService {
private final KafkaTemplate<String, String> kafkaTemplate;
public MyProducerService(KafkaTemplate<String, String> kafkaTemplate) {
this.kafkaTemplate = kafkaTemplate;
}
}Menghantar Mesej Pertama Anda
Cara paling mudah untuk menghantar mesej adalah dengan menggunakan kaedah send(). Anda menentukan nama topik dan muatan mesej.
Topik ialah nama kategori atau suapan tempat rekod disimpan dan diterbitkan. Muatan ialah data sebenar yang ingin anda hantar.
Contoh Penghantaran KafkaTemplate Asas
Berikut ialah aplikasi Spring Boot lengkap yang boleh dijalankan dan menghantar mesej rentetan ringkas ke topik bernama my-topic. Pastikan broker Kafka sedang berjalan (contohnya, pada localhost:9092) supaya aplikasi ini berfungsi.
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;
@SpringBootApplication
public class KafkaProducerApp {
public static void main(String[] args) {
SpringApplication.run(KafkaProducerApp.class, args);
}
@Component
public class MyMessageSender implements CommandLineRunner {
private final KafkaTemplate<String, String> kafkaTemplate;
public MyMessageSender(KafkaTemplate<String, String> kafkaTemplate) {
this.kafkaTemplate = kafkaTemplate;
}
@Override
public void run(String... args) throws Exception {
String topic = "my-topic";
String message = "Hello from CoddyKit!";
kafkaTemplate.send(topic, message);
System.out.println("Sent message: " + message + " to topic: " + topic);
}
}
}Penghantaran Mesej Segerak
Secara lalai, kafkaTemplate.send() adalah tidak segerak. Walau bagaimanapun, anda boleh menjadikannya segerak dengan memanggil .get() pada ListenableFuture yang dikembalikan.
- Ini menyekat bebenang semasa sehingga mesej dihantar dan diakui oleh Kafka.
- Berguna apabila anda memerlukan pengesahan segera bahawa mesej telah diproses.
- Boleh menjejaskan prestasi kerana penyekatan, jadi gunakannya dengan bijak.
import org.springframework.kafka.support.SendResult;
import java.util.concurrent.ExecutionException;
// ... in a service method
try {
SendResult<String, String> result =
kafkaTemplate.send("sync-topic", "Sync message").get();
System.out.println("Message sent synchronously: " +
result.getProducerRecord().value());
} catch (InterruptedException | ExecutionException e) {
System.err.println("Failed to send message: " + e.getMessage());
}Penghantaran Tak Segerak: Cara Pilihan
Bagi kebanyakan aplikasi, penghantaran tidak segerak lebih diutamakan. Ia membolehkan aplikasi anda meneruskan pemprosesan tanpa menunggu pengakuan Kafka, sekali gus meningkatkan daya pemprosesan.
send()mengembalikanListenableFuture(atauCompletableFuturedalam versi Spring yang lebih baharu).- Anda melampirkan panggilan balik pada future ini untuk mengendalikan kejayaan atau kegagalan.
- Pendekatan tanpa penyekatan ini penting untuk perkhidmatan mikro yang boleh diskalakan.
Mengendalikan Kejayaan Tak Segerak
Untuk memproses hasil penghantaran tidak segerak, anda menggunakan panggilan balik. Panggilan balik kejayaan menerima objek SendResult, yang mengandungi butiran tentang rekod yang dihantar.
Di sinilah anda boleh merekodkan penghantaran yang berjaya atau mengemas kini keadaan aplikasi.
kafkaTemplate.send("async-topic", "Async message")
.addCallback(
result -> System.out.println("Sent successfully: " +
result.getProducerRecord().value()),
ex -> System.err.println("Failed to send: " +
ex.getMessage())
);Mengendalikan Kegagalan Tak Segerak
Panggilan balik kegagalan amat penting untuk aplikasi yang teguh. Ia dipanggil jika mesej tidak dapat dihantar selepas percubaan semula, atau jika ralat serta-merta berlaku.
Dalam panggilan balik ini, anda hendaklah:
- Merekodkan butiran ralat.
- Melaksanakan logik percubaan semula (jika belum dikendalikan oleh konfigurasi Kafka).
- Memindahkan mesej ke Topik Surat Mati (DLT) untuk pemeriksaan kemudian.
Contoh Penghantaran Tak Segerak dengan Panggilan Balik
Mari kemas kini contoh sebelumnya untuk menggunakan penghantaran tidak segerak dengan panggilan balik kejayaan dan kegagalan. Ini menunjukkan cara yang lebih teguh untuk menghantar mesej.
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;
@SpringBootApplication
public class KafkaAsyncProducerApp {
public static void main(String[] args) {
SpringApplication.run(KafkaAsyncProducerApp.class, args);
}
@Component
public class MyAsyncMessageSender implements CommandLineRunner {
private final KafkaTemplate<String, String> kafkaTemplate;
public MyAsyncMessageSender(KafkaTemplate<String, String> kafkaTemplate) {
this.kafkaTemplate = kafkaTemplate;
}
@Override
public void run(String... args) throws Exception {
String topic = "my-async-topic";
String message = "Hello async from CoddyKit!";
kafkaTemplate.send(topic, message)
.addCallback(
result -> System.out.println("Async success: " + result.getProducerRecord().value()),
ex -> System.err.println("Async failure: " + ex.getMessage())
);
System.out.println("Attempted to send async message.");
}
}
}Menghantar dengan Kunci untuk Susunan
Kafka membolehkan anda menghantar mesej dengan kunci. Kunci digunakan untuk menentukan partition yang akan menerima mesej.
- Mesej dengan kunci yang sama sentiasa dihantar ke partition yang sama.
- Ini memastikan susunan bagi mesej yang berkaitan (contohnya, semua kemas kini untuk pengguna tertentu).
- Gunakan
kafkaTemplate.send(topic, key, message).
kafkaTemplate.send("user-events", "user-123", "User 123 updated profile");
kafkaTemplate.send("user-events", "user-456", "User 456 logged in");Soalan KafkaTemplate
Manakah antara pernyataan berikut tentang KafkaTemplate.send() dan jenis pulangannya yang TRUE?
Imbas Kembali: Menghantar Mesej
Tahniah! Anda telah mempelajari perkara asas tentang penghantaran mesej dengan KafkaTemplate Spring Boot:
- Suntikan: Cara mendapatkan
KafkaTemplatedalam perkhidmatan anda. - Penghantaran Asas: Menggunakan
send(topic, message). - Segerak: Menyekat dengan
.get()untuk mendapatkan pengesahan segera. - Tidak Segerak: Kaedah pilihan yang menggunakan
ListenableFuturedan panggilan balik untuk kecekapan. - Kunci: Cara menggunakan kunci mesej untuk susunan dan pembahagian.
Seterusnya, kita akan mendalami penyesuaian konfigurasi pengeluar untuk prestasi dan kebolehpercayaan yang optimum!
Pelajari Spring Boot 4 Lanjutan: Seni Bina Dipacu Peristiwa (Kafka) dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Soalan Lazim
Adakah pelajaran “Menghantar Mesej dengan KafkaTemplate” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Spring Boot 4 Lanjutan: Seni Bina Dipacu Peristiwa (Kafka), termasuk “Menghantar Mesej dengan KafkaTemplate”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Spring Boot 4 Lanjutan: Seni Bina Dipacu Peristiwa (Kafka) merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Menghantar Mesej dengan KafkaTemplate”?
Gunakan KafkaTemplate Spring untuk menghantar mesej secara terprogram ke topik Kafka, termasuk pendekatan segerak dan tak segerak. Anda berlatih Spring Boot 4 Lanjutan: Seni Bina Dipacu Peristiwa (Kafka) menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Spring Boot 4 Lanjutan: Seni Bina Dipacu Peristiwa (Kafka)?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Spring Boot 4 Lanjutan: Seni Bina Dipacu Peristiwa (Kafka) di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Menghantar Mesej dengan KafkaTemplate” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Spring Boot 4 Lanjutan: Seni Bina Dipacu Peristiwa (Kafka) ini?
Ya. Setiap pelajaran Spring Boot 4 Lanjutan: Seni Bina Dipacu Peristiwa (Kafka) menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mengintegrasikan Spring Kafka Starter
- Menghantar Mesej dengan KafkaTemplate
- Menyesuaikan Konfigurasi Pengeluar
- Mengendalikan Panggilan Balik Penghantaran Pengeluar dan Pengakuan