Menggunakan Spring Kafka dengan Azure Event Hubs untuk Kafka API
Tutorial ini menunjukkan kepada Anda cara mengonfigurasi Spring Cloud Stream Binder berbasis Java untuk menggunakan Azure Event Hubs for Kafka untuk mengirim dan menerima pesan dengan Azure Event Hubs. Untuk informasi selengkapnya, lihat Menggunakan Azure Event Hubs dari aplikasi Apache Kafka
Dalam tutorial ini, kita akan menyertakan dua metode autentikasi: autentikasi Microsoft Entra dan autentikasi Tanda Tangan Akses Bersama (SAS). Tab Tanpa Kata Sandi memperlihatkan autentikasi Microsoft Entra dan tab string Koneksi ion memperlihatkan autentikasi SAS.
Autentikasi Microsoft Entra adalah mekanisme untuk menyambungkan ke Azure Event Hubs for Kafka menggunakan identitas yang ditentukan dalam ID Microsoft Entra. Dengan autentikasi Microsoft Entra, Anda dapat mengelola identitas pengguna database dan layanan Microsoft lain di lokasi pusat, yang menyederhanakan manajemen izin.
Autentikasi SAS menggunakan string koneksi namespace Azure Event Hubs Anda untuk akses yang didelegasikan ke Azure Event Hubs for Kafka. Jika Anda memilih untuk menggunakan Tanda Tangan Akses Bersama sebagai kredensial, Anda perlu mengelola string koneksi sendiri.
Prasyarat
Langganan Azure - membuat secara gratis.
Java Development Kit (JDK) versi 8 atau yang lebih tinggi.
Apache Maven, versi 3.2 atau lebih tinggi.
cURL atau utilitas HTTP serupa untuk menguji fungsionalitas.
Azure Cloud Shell atau Azure CLI 2.37.0 atau yang lebih tinggi.
Hub Azure Event. Jika Anda tidak memilikinya, buat pusat aktivitas menggunakan portal Azure.
Aplikasi Spring Boot. Jika Anda tidak memilikinya, buat proyek Maven dengan Spring Initializr. Pastikan untuk memilih Proyek Maven dan, di bawah Dependensi, tambahkan dependensi Spring Web, Spring for Apache Kafka, dan Cloud Stream , lalu pilih Java versi 8 atau yang lebih tinggi.
Penting
Spring Boot versi 2.5 atau yang lebih tinggi diperlukan untuk menyelesaikan langkah-langkah dalam tutorial ini.
Menyiapkan kredensial
Azure Event Hubs mendukung penggunaan ID Microsoft Entra untuk mengotorisasi permintaan ke sumber daya Azure Event Hubs. Dengan MICROSOFT Entra ID, Anda dapat menggunakan kontrol akses berbasis peran Azure (Azure RBAC) untuk memberikan izin kepada prinsip keamanan, yang mungkin merupakan pengguna atau perwakilan layanan aplikasi.
Jika Anda ingin menjalankan sampel ini secara lokal dengan autentikasi Microsoft Entra, pastikan akun pengguna Anda telah mengautentikasi melalui Azure Toolkit untuk IntelliJ, plugin Akun Azure Visual Studio Code, atau Azure CLI. Selain itu, pastikan akun telah diberikan izin yang memadai.
Catatan
Saat menggunakan koneksi tanpa kata sandi, Anda perlu memberikan akses akun Anda ke sumber daya. Di Azure Event Hubs, tetapkan Azure Event Hubs Data Receiver
peran dan Azure Event Hubs Data Sender
ke akun Microsoft Entra yang saat ini Anda gunakan. Untuk informasi selengkapnya tentang memberikan peran akses, lihat Menetapkan peran Azure menggunakan portal Azure dan Mengotorisasi akses ke sumber daya Azure Event Hubs menggunakan ID Microsoft Entra.
Mengirim dan menerima pesan dari Azure Event Hubs
Dengan azure Event hub, Anda dapat mengirim dan menerima pesan menggunakan Spring Cloud Azure.
Untuk menginstal modul Spring Cloud Azure Starter, tambahkan dependensi berikut ke file pom.xml Anda:
Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.11.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Catatan
Jika Anda menggunakan Spring Boot 2.x, pastikan untuk mengatur versi ke
spring-cloud-azure-dependencies
4.17.0
. Bill of Material (BOM) ini harus dikonfigurasi di bagian<dependencyManagement>
file pom.xml Anda. Ini memastikan bahwa semua dependensi Spring Cloud Azure menggunakan versi yang sama. Untuk informasi selengkapnya tentang versi yang digunakan untuk BOM ini, lihat Versi Spring Cloud Azure mana yang Harus Saya Gunakan.Artefak Spring Cloud Azure Starter:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency>
Kodekan aplikasi
Gunakan langkah-langkah berikut untuk mengonfigurasi aplikasi Anda untuk menghasilkan dan menggunakan pesan menggunakan Azure Event Hubs.
Konfigurasikan info masuk Pusat aktivitas dengan menambahkan properti berikut ke file application.properties Anda.
spring.cloud.stream.kafka.binder.brokers=${AZ_EVENTHUBS_NAMESPACE_NAME}.servicebus.windows.net:9093 spring.cloud.function.definition=consume;supply spring.cloud.stream.bindings.consume-in-0.destination=${AZ_EVENTHUB_NAME} spring.cloud.stream.bindings.consume-in-0.group=$Default spring.cloud.stream.bindings.supply-out-0.destination=${AZ_EVENTHUB_NAME}
Tip
Jika Anda menggunakan versi
spring-cloud-azure-dependencies:4.3.0
, maka Anda harus menambahkan propertispring.cloud.stream.binders.<kafka-binder-name>.environment.spring.main.sources
dengan nilaicom.azure.spring.cloud.autoconfigure.kafka.AzureKafkaSpringCloudStreamConfiguration
.Karena
4.4.0
, properti ini akan ditambahkan secara otomatis, jadi tidak perlu menambahkannya secara manual.Tabel berikut ini menjelaskan bidang dalam konfigurasi:
Bidang Deskripsi spring.cloud.stream.kafka.binder.brokers
Menentukan titik akhir Azure Event Hubs. spring.cloud.stream.bindings.consume-in-0.destination
Menentukan hub peristiwa tujuan input, yang untuk tutorial ini adalah hub yang Anda buat sebelumnya. spring.cloud.stream.bindings.consume-in-0.group
Menentukan Grup Konsumen dari Azure Event Hubs, yang dapat Anda atur $Default
untuk menggunakan grup konsumen dasar yang dibuat saat Anda membuat instans Azure Event Hubs.spring.cloud.stream.bindings.supply-out-0.destination
Menentukan hub peristiwa tujuan output, yang untuk tutorial ini sama dengan tujuan input. Catatan
Jika Anda mengaktifkan pembuatan topik otomatis, pastikan untuk menambahkan item
spring.cloud.stream.kafka.binder.replicationFactor
konfigurasi , dengan nilai diatur ke setidaknya 1. Untuk informasi selengkapnya, lihat Panduan Referensi Binder Spring Cloud Stream Kafka.Edit file kelas startup untuk menampilkan konten berikut.
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.messaging.Message; import org.springframework.messaging.support.GenericMessage; import reactor.core.publisher.Flux; import reactor.core.publisher.Sinks; import java.util.function.Consumer; import java.util.function.Supplier; @SpringBootApplication public class EventHubKafkaBinderApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(EventHubKafkaBinderApplication.class); private static final Sinks.Many<Message<String>> many = Sinks.many().unicast().onBackpressureBuffer(); public static void main(String[] args) { SpringApplication.run(EventHubKafkaBinderApplication.class, args); } @Bean public Supplier<Flux<Message<String>>> supply() { return ()->many.asFlux() .doOnNext(m->LOGGER.info("Manually sending message {}", m)) .doOnError(t->LOGGER.error("Error encountered", t)); } @Bean public Consumer<Message<String>> consume() { return message->LOGGER.info("New message received: '{}'", message.getPayload()); } @Override public void run(String... args) { many.emitNext(new GenericMessage<>("Hello World"), Sinks.EmitFailureHandler.FAIL_FAST); } }
Tip
Dalam tutorial ini, tidak ada operasi autentikasi dalam konfigurasi atau kode. Namun, menyambungkan ke layanan Azure memerlukan autentikasi. Untuk menyelesaikan autentikasi, Anda perlu menggunakan Azure Identity. Spring Cloud Azure menggunakan
DefaultAzureCredential
, yang disediakan pustaka Azure Identity untuk membantu Anda mendapatkan kredensial tanpa perubahan kode apa pun.DefaultAzureCredential
mendukung beberapa metode autentikasi dan menentukan metode mana yang akan digunakan saat runtime. Pendekatan ini memungkinkan aplikasi Anda menggunakan metode autentikasi yang berbeda di lingkungan yang berbeda (seperti lingkungan lokal dan produksi) tanpa menerapkan kode khusus lingkungan. Untuk informasi selengkapnya, lihat DefaultAzureCredential.Untuk menyelesaikan autentikasi di lingkungan pengembangan lokal, Anda dapat menggunakan Azure CLI, Visual Studio Code, PowerShell, atau metode lainnya. Untuk informasi selengkapnya, lihat Autentikasi Azure di lingkungan pengembangan Java. Untuk menyelesaikan autentikasi di lingkungan hosting Azure, sebaiknya gunakan identitas terkelola yang ditetapkan pengguna. Untuk informasi selengkapnya, lihat Apa yang dimaksud dengan identitas terkelola untuk sumber daya Azure?
Mulai aplikasi. Pesan seperti contoh berikut akan diposting di log aplikasi Anda:
Kafka version: 3.0.1 Kafka commitId: 62abe01bee039651 Kafka startTimeMs: 1622616433956 New message received: 'Hello World'
Sebarkan ke Azure Spring Apps
Sekarang setelah Anda memiliki aplikasi Spring Boot yang berjalan secara lokal, saatnya untuk memindahkannya ke produksi. Azure Spring Apps memudahkan penyebaran aplikasi Spring Boot ke Azure tanpa perubahan kode apa pun. Layanan ini mengelola infrastruktur aplikasi Spring sehingga pengembang dapat fokus pada kode mereka. Azure Spring Apps menyediakan manajemen siklus hidup menggunakan pemantauan dan diagnostik yang komprehensif, manajemen konfigurasi, penemuan layanan, integrasi CI/CD, penyebaran biru-hijau, dan banyak lagi. Untuk menyebarkan aplikasi Anda ke Azure Spring Apps, lihat Menyebarkan aplikasi pertama Anda ke Azure Spring Apps.
Langkah berikutnya
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk