Pengaturan langganan persisten ActiveMQ Dengan mengatur mode pengiriman PERSISTENT untuk penerbit, Anda dapat menggunakan langganan persisten untuk pelanggan, yang menjamin bahwa program Pub/Sub menerima semua pesan yang diterbitkan. Langganan pesan dibagi menjadi langganan tidak tahan lama dan langganan tahan lama, dan langganan tidak tahan lama hanya dapat menerima pesan yang dikirim ke topik saat klien aktif, yaitu, ketika klien offline, pesan yang dikirim ke topik selama periode ini akan hilang dan tidak pernah diterima. Saat klien offline, ActiveMQ akan menyimpan semua pesan yang dikirim ke subjek sesuai dengan ID-nya, dan ketika klien terhubung ke ActiveMQ lagi, ia akan mendapatkan semua pesan yang dikirim ke subjek saat offline. Langganan persisten meningkatkan overhead dan hanya memiliki satu pengguna aktif dalam langganan persisten pada satu waktu. Langkah-langkah untuk membuat langganan persisten: 1. Siapkan ID pelanggan untuk koneksi; 2. Tentukan nama langganan untuk topik langganan; Kombinasi di atas harus unik. Kode mengimplementasikan langganan persisten
(1) Saat menggunakan antrian, yaitu saat mengantri, hanya ada satu konsumen per pesan, jadi persistensinya sangat sederhana, cukup simpan ke database
。 Kemudian, setiap konsumen dapat mengambilnya dan membuangnya. Tidak masalah jika konsumen mematikannya untuk sementara waktu.
(2) Saat menggunakan topik, yaitu saat berlangganan, setiap pesan dapat memiliki banyak konsumen, yang lebih merepotkan.
Pertama, dengan asumsi bahwa konsumen adalah konsumen biasa, ------------------------ Setelah peluncuran <1> activemq diluncurkan, berita 1 dirilis, namun sayangnya tidak ada konsumen yang memulai sekarang, yaitu tidak ada konsumen yang berlangganan. Jadi
, berita itu ditinggalkan.
<2> Konsumen 1 dimulai, terhubung ke activemq, berlangganan, dan menunggu pesan~~
activemq memposting pesan 2, OK, konsumen 1 menerima, dan memprosesnya. Pengabaian pesan.
<3> Consumer 2 juga diluncurkan, terhubung ke activemq, berlangganan, dan sedang menunggu pesan~~
activemq menerbitkan pesan 3, OK, konsumen 1, konsumen 2 semuanya diterima dan diproses. Pengabaian pesan.
<4> Konsumen 1 dimatikan.
activemq memposting pesan 4, OK, konsumen 2 menerima, dan memprosesnya. Pengabaian pesan.
<5> Konsumen 1 dimulai lagi.
activemq menerbitkan pesan 5, OK, konsumen 1, dan konsumen 2 semuanya menerima dan memprosesnya. Pengabaian pesan. ----------------------------- Singkatnya: ActiveMQ hanya mengirim pesan ke konsumen yang saat ini diluncurkan. Konsumen yang mematikan akan melewatkan banyak pesan dan tidak akan dapat menerimanya lagi.
Jika pesan yang dikirim adalah data sinkronisasi pengguna penting dan melesetnya, data pengguna tidak disinkronkan.
Jadi, bagaimana Anda membuat konsumen menerima pesan tak terjawab saat mereka memulai ulang?
Jawabannya adalah langganan yang terus-menerus. -----------------------------
Langganan biasa, tanpa membedakan antara konsumen, jika ada beberapa kepala di tempat tersebut, lemparkan beberapa roti kukus. Untuk langganan persisten, Anda perlu mencatat nama konsumen. Zhang San berkata, saya Zhang San, ada roti kukus untuk saya, saya akan kembali untuk mengambilnya. Li Si berkata, saya Li Si, ada roti kukus untuk saya, saya akan kembali untuk mengambilnya. activemq menuliskan nama Zhang San dan Li Si.
Kemudian, saat membagi roti kukus, satu kepala masih memberikan roti kukus. Setelah pembagian, ketika dia melihat bahwa Zhang San tidak berbicara, itu berarti dia tidak ada di sana, jadi tinggalkan dia satu. Li Si berbicara, jadi tidak perlu tinggal.
Zhang San kembali, mencari activemq, dan melihat-lihat, ini bukan Zhang San, bawa roti kukusnya dengan cepat. Mungkin satu roti kukus, atau mungkin 100 roti kukus, itu tergantung pada berapa banyak roti kukus yang telah dibagi Zhang San sejak dia pergi sebentar.
activemq membedakan konsumen berdasarkan clientID dan nama pelanggan. ----------------------------- Membuat koneksi koneksi = connectionFactory.createConnection(); connection.setClientID("bbb"); Langganan persisten memerlukan pengaturan ini. koneksi.mulai();
Membuat sesi Sesi sesi = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Membuat tujuan Topik topik = session.createTopic("userSyncTopic"); Nama topik
MessageConsumer konsumen = session.createConsumer(topik); Berlangganan reguler MessageConsumer konsumen = session.createDurableSubscriber(topic,"bbb"); Langganan persisten
Poin lainnya adalah bahwa produsen pesan menggunakan mode persisten saat mengirim pesan Produser MessageProducer = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Jika tidak, itu persisten secara default
(5) Jika "clientID" yang sama digunakan, itu dianggap sebagai konsumen yang sama. Jika dua program menggunakan "clientID" yang sama, hanya satu yang dapat terhubung ke activemq secara bersamaan, dan koneksi kedua akan melaporkan kesalahan.
(6) Pengaturan activemq ada di conf/activemq.xml, dan pesan default disimpan di data/kahadb, dan pesan tidak akan hilang saat memulai ulang activemq.
Anda dapat mengakses http://localhost:8161/admin/index.jsp: melihat informasi tentang antrean, topik, dan pelanggan persisten saat ini, mengirim pesan, dan lainnya.
Anda dapat menyalin konten di activemq-jdbc.xml dan memodifikasinya, dan Anda dapat menyimpan pesan di database lain. |