Jadual Kandungan
Konfigurasi persekitaran
Analisis kehilangan mesej
Fasa pengeluaran
Mesej simulasi tamat pengeluaran hilang
RabbitMQ
Pihak pengguna
Rumah Java javaTutorial Cara menggunakan SpringBoot+RabbitMQ untuk mencapai penghantaran mesej yang boleh dipercayai

Cara menggunakan SpringBoot+RabbitMQ untuk mencapai penghantaran mesej yang boleh dipercayai

May 29, 2023 pm 10:34 PM
springboot rabbitmq

    Konfigurasi persekitaran

    SpringBoot Integrasi RabbitMQ untuk merealisasikan penghantaran mesej.

    1. Tambahkan maven pergantungan

           <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-amqp</artifactId>
            </dependency>
    Salin selepas log masuk

    2 Tambah fail konfigurasi application.yml

    spring:
      rabbitmq:
        host: 192.168.3.19
        port: 5672
        username: admin
        password: xxxx
    Salin selepas log masuk

    3 Konfigurasikan suis, baris gilir dan pengikatan

    rreee

    4. Penerbit menghantar mesej

        @Bean
        public DirectExchange myExchange() {
            DirectExchange directExchange = new DirectExchange("myExchange");
            return directExchange;
        }
    
        @Bean
        public Queue myQueue() {
            Queue queue = new Queue("myQueue");
            return queue;
        }
    
        @Bean
        public Binding binding() {
            return BindingBuilder.bind(myQueue()).to(myExchange()).with("myRoutingKey");
        }
    Salin selepas log masuk

    5 Pengguna menerima mesej

        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        @GetMapping("/send")
        public String send(String message) {
            rabbitTemplate.convertAndSend("myExchange","myRoutingKey",message);
            System.out.println("【发送消息】" + message)
            return "【send message】" + message;
        }
    Salin selepas log masuk

    6 Panggil penamat pengeluaran untuk menghantar mesej hello, dan output konsol:

    [Hantar mesej] hello
    [Terima mesej] hello Masa semasa 2022-05-12 10:21:14

    Menunjukkan bahawa mesej telah berjaya diterima.

    Analisis kehilangan mesej

    Cara menggunakan SpringBoot+RabbitMQ untuk mencapai penghantaran mesej yang boleh dipercayai

    Dari pengeluaran hingga penggunaan mesej, kehilangan mesej mungkin berlaku dalam peringkat berikut:

    • Hilang di bahagian pengeluaran: Pengeluar tidak boleh menghantar ke RabbitMQ

    • Hilang di bahagian storan: RabbitMQ Storan itu sendiri tidak berfungsi

    • Hilang pengguna: Disebabkan masalah rangkaian, storan tidak boleh dihantar ke hujung pengguna, atau penggunaan ditutup dan penggunaan biasa tidak boleh dihantar

    RabbitMQ Dari hujung pengeluaran, hujung storan dan hujung pengguna Menyediakan sokongan yang baik untuk penghantaran yang boleh dipercayai.

    Fasa pengeluaran

    Fasa pengeluaran menggunakan mekanisme pengesahan permintaan untuk memastikan penghantaran mesej yang boleh dipercayai. Selepas menghantar mesej kepada pelayan RabbitMQ, RabbitMQ menerima mesej dan mengembalikan pengesahan permintaan kepada pengirim, menunjukkan bahawa pelayan RabbitMQ telah berjaya menerima mesej tersebut.

    Aplikasi konfigurasi.yml

        @RabbitListener(queuesToDeclare = @Queue("myQueue"))
        public void process(String msg, Channel channel, Message message) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date();
            String time = sdf.format(date);
            System.out.println("【接收信息】" + msg + " 当前时间" + time);
    Salin selepas log masuk

    Konfigurasi

    spring:
      rabbitmq:
        # 消息确认机制 生产者 -> 交换机
        publisher-confirms: true
        # 消息返回机制  交换机 -> 队列
        publisher-returns: true
    Salin selepas log masuk

    Mesej daripada Pengeluar kepada Tukar, dengan mod pengesahan confirmCallback . Selepas mesej berjaya dihantar, mesej akan memanggil kaedah confirm(CorrelationData correlationData, boolean ack, String cause) dan menentukan sama ada mesej berjaya dihantar berdasarkan ack.

    Mesej pergi daripada tukar kepada baris gilir, dengan returnCallback mod undur.

    Hantar mesej product message Output konsol adalah seperti berikut:

    【Hantar mesej】mesej produk
    【Terima mesej】mesej produk Masa semasa 2022-05-12 11 :27 :56
    [correlationData]:null
    [ack]true
    [cause]null
    [hantar berjaya]

    Mesej simulasi tamat pengeluaran hilang

    Terdapat dua penyelesaian di sini:

    • Tutup broker serta-merta selepas menghantar mesej yang terakhir menutup rangkaian, tetapi selepas broker ditutup, konsol akan sentiasa melaporkan ralat, dan ralat 500 akan dilaporkan semasa menghantar mesej.

    • Menghantar suis yang tidak wujud:

    @Configuration
    @Slf4j
    public class RabbitConfig {
    
        @Autowired
        private ConnectionFactory connectionFactory;
    
        @Bean
        public RabbitTemplate rabbitTemplate() {
            RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
            rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
                @Override
                public void confirm(CorrelationData correlationData, boolean ack, String cause) {
                    log.info("【correlationData】:" + correlationData);
                    log.info("【ack】" + ack);
                    log.info("【cause】" + cause);
                    if (ack) {
                        log.info("【发送成功】");
                    } else {
                        log.info("【发送失败】correlationData:" + correlationData + " cause:" + cause);
                    }
                }
            });
            rabbitTemplate.setMandatory(true);
            rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
                @Override
                public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
                    log.warn("【消息发送失败】");
                    log.info("【message】" + message);
                    log.info("【replyCode】" + replyCode);
                }
            });
    
            return rabbitTemplate;
        }
    }
    Salin selepas log masuk

    Keputusan:

    [correlationData]:null
    【ack】false
    【sebab】kaedah protokol saluran: #method(reply-code=404, reply-text=NOT_FOUND - tiada pertukaran 'myExchangexxxxx' dalam vhost '/', class-id =60, method-id=40)
    [Gagal menghantar]

    Apabila penghantaran gagal, anda boleh mencuba semula mesej

    Suis adalah betul dan baris gilir yang melakukannya not exist dihantar:

    Suis menerima mesej dan mengembalikan pemberitahuan kejayaan:

    [correlationData]:CorrelationData [id=7d468b47-b422-4523-b2a2. -06b14aef073c]
    [ack 】true
    [cause]null
    [Berjaya dihantar]

    Suis tidak menemui baris gilir dan mengembalikan maklumat kegagalan:

    [Penghantaran mesej gagal]
    [mesej]mesej produk
    [replyCode]312

    RabbitMQ

    Dayakan kegigihan baris gilir, buat baris gilir dan suisKonfigurasi lalai ialah kegigihan daripada. Mula-mula, tetapkan baris gilir dan tukar dengan betul, dan ubah suai baris gilir untuk pemantauan penggunaan supaya mesej disimpan dalam baris gilir .

    Ubah suai kegigihan baris gilir kepada tidak berterusan:

    // myExchange 修改成 myExchangexxxxx
    rabbitTemplate.convertAndSend("myExchangexxxxx","myRoutingKey",message);
    Salin selepas log masuk

    Selepas menghantar mesej, mesej disimpan dalam baris gilir, dan kemudian dimulakan semula RabbitMQ, mesej itu tidak wujud lagi.
    Tetapkan kegigihan baris gilir:

        @Bean
        public Queue myQueue() {
            Queue queue = new Queue("myQueue",false);
            return queue;
        }
    Salin selepas log masuk

    Selepas dimulakan semula, mesej dalam baris gilir masih wujud.

    Pihak pengguna

    Pihak pengguna memulakan mod pengesahan automatik secara lalai ack Apabila mesej baris gilir diterima oleh pengguna, mesej dalam baris gilir akan dipadamkan secara automatik tanpa mengira sama ada terdapat ialah sebarang mesej daripada pihak pengguna. Oleh itu, untuk memastikan pengguna berjaya menggunakan mesej tersebut, tukar mod automatik kepada mod pengesahan manual:

    Ubah suai fail application.yml

        @Bean
        public Queue myQueue() {
            Queue queue = new Queue("myQueue",true);
            return queue;
        }
    Salin selepas log masuk

    Selepas menggunakan dan menerima mesej, pengesahan manual diperlukan:

    spring:
      rabbitmq:
        # 手动消息确认
        listener:
          simple:
            acknowledge-mode: manual
    Salin selepas log masuk
    rrree

    Jika tidak ditambah:

    channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
    Salin selepas log masuk

    Hantar dua mesej

    Selepas mesej diterima, tiada pengesahan dan dimasukkan semula ke dalam baris gilir:

    Cara menggunakan SpringBoot+RabbitMQ untuk mencapai penghantaran mesej yang boleh dipercayai

    Mulakan semula projek Selepas itu, mesej dalam baris gilir akan dihantar kepada pengguna, tetapi tanpa pengesahan ack, mereka akan terus dimasukkan semula ke dalam baris gilir.

    Selepas menambah channel.basicAck, mulakan semula projek

    Cara menggunakan SpringBoot+RabbitMQ untuk mencapai penghantaran mesej yang boleh dipercayai

    Mesej baris gilir akan dipadamkan

    basicAckParameter terakhir kaedah multiple Menunjukkan bahawa baris gilir sebelumnya dipadamkan.

    multiple ditetapkan kepada true dan baris gilir di belakang dikosongkan

    Cara menggunakan SpringBoot+RabbitMQ untuk mencapai penghantaran mesej yang boleh dipercayai

    Atas ialah kandungan terperinci Cara menggunakan SpringBoot+RabbitMQ untuk mencapai penghantaran mesej yang boleh dipercayai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    AI Hentai Generator

    AI Hentai Generator

    Menjana ai hentai secara percuma.

    Artikel Panas

    R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Tetapan grafik terbaik
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Cara Membuka Segala -galanya Di Myrise
    4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    Cara membina aplikasi pemesejan yang boleh dipercayai dengan React dan RabbitMQ Cara membina aplikasi pemesejan yang boleh dipercayai dengan React dan RabbitMQ Sep 28, 2023 pm 08:24 PM

    Cara membina aplikasi pemesejan yang boleh dipercayai dengan React dan RabbitMQ Pengenalan: Aplikasi moden perlu menyokong pemesejan yang boleh dipercayai untuk mencapai ciri seperti kemas kini masa nyata dan penyegerakan data. React ialah perpustakaan JavaScript yang popular untuk membina antara muka pengguna, manakala RabbitMQ ialah perisian tengah pemesejan yang boleh dipercayai. Artikel ini akan memperkenalkan cara menggabungkan React dan RabbitMQ untuk membina aplikasi pemesejan yang boleh dipercayai dan memberikan contoh kod khusus. Gambaran keseluruhan RabbitMQ:

    Cara menggunakan RabbitMQ untuk melaksanakan pemprosesan mesej teragih dalam PHP Cara menggunakan RabbitMQ untuk melaksanakan pemprosesan mesej teragih dalam PHP Jul 18, 2023 am 11:00 AM

    Cara menggunakan RabbitMQ untuk melaksanakan pemprosesan mesej teragih dalam PHP Pengenalan: Dalam pembangunan aplikasi berskala besar, sistem teragih telah menjadi keperluan biasa. Pemprosesan mesej teragih ialah corak yang meningkatkan kecekapan dan kebolehpercayaan sistem dengan mengagihkan tugas kepada berbilang nod pemprosesan. RabbitMQ ialah sistem baris gilir mesej sumber terbuka yang boleh dipercayai yang menggunakan protokol AMQP untuk melaksanakan penghantaran dan pemprosesan mesej. Dalam artikel ini kami akan membincangkan cara menggunakan RabbitMQ dalam PHP untuk pengedaran

    Analisis perbandingan dan perbezaan antara SpringBoot dan SpringMVC Analisis perbandingan dan perbezaan antara SpringBoot dan SpringMVC Dec 29, 2023 am 11:02 AM

    SpringBoot dan SpringMVC adalah kedua-dua rangka kerja yang biasa digunakan dalam pembangunan Java, tetapi terdapat beberapa perbezaan yang jelas antara mereka. Artikel ini akan meneroka ciri dan penggunaan kedua-dua rangka kerja ini dan membandingkan perbezaannya. Mula-mula, mari belajar tentang SpringBoot. SpringBoot telah dibangunkan oleh pasukan Pivotal untuk memudahkan penciptaan dan penggunaan aplikasi berdasarkan rangka kerja Spring. Ia menyediakan cara yang pantas dan ringan untuk membina bersendirian, boleh dilaksanakan

    Menggunakan RabbitMQ dalam Go: Panduan Lengkap Menggunakan RabbitMQ dalam Go: Panduan Lengkap Jun 19, 2023 am 08:10 AM

    Apabila aplikasi moden meningkat dalam kerumitan, pemesejan telah menjadi alat yang berkuasa. Dalam bidang ini, RabbitMQ telah menjadi broker mesej yang sangat popular yang boleh digunakan untuk menghantar mesej antara aplikasi yang berbeza. Dalam artikel ini, kami akan meneroka cara menggunakan RabbitMQ dalam bahasa Go. Panduan ini akan merangkumi perkara berikut: Pengenalan kepada Pemasangan RabbitMQ RabbitMQ Konsep Asas RabbitMQ Bermula dengan RabbitMQ dalam Go RabbitMQ and Go

    Penyelesaian untuk penyegerakan data masa nyata antara Golang dan RabbitMQ Penyelesaian untuk penyegerakan data masa nyata antara Golang dan RabbitMQ Sep 27, 2023 pm 10:41 PM

    Pengenalan kepada penyelesaian untuk penyegerakan data masa nyata antara Golang dan RabbitMQ: Pada era hari ini, dengan populariti Internet dan pertumbuhan pesat volum data, penyegerakan data masa nyata telah menjadi semakin penting. Untuk menyelesaikan masalah penghantaran data tak segerak dan penyegerakan data, banyak syarikat telah mula menggunakan baris gilir mesej untuk mencapai penyegerakan data masa nyata. Artikel ini akan memperkenalkan penyelesaian penyegerakan data masa nyata berdasarkan Golang dan RabbitMQ dan memberikan contoh kod khusus. 1. Apakah RabbitMQ? Rabbi

    Tutorial praktikal pembangunan SpringBoot+Dubbo+Nacos Tutorial praktikal pembangunan SpringBoot+Dubbo+Nacos Aug 15, 2023 pm 04:49 PM

    Artikel ini akan menulis contoh terperinci untuk bercakap tentang perkembangan sebenar dubbo+nacos+Spring Boot. Artikel ini tidak akan merangkumi terlalu banyak pengetahuan teori, tetapi akan menulis contoh paling mudah untuk menggambarkan bagaimana dubbo boleh disepadukan dengan nacos untuk membina persekitaran pembangunan dengan cepat.

    Amalan aplikasi go-zero dan RabbitMQ Amalan aplikasi go-zero dan RabbitMQ Jun 23, 2023 pm 12:54 PM

    Kini semakin banyak perusahaan mula menggunakan model seni bina perkhidmatan mikro, dan dalam seni bina ini, baris gilir mesej telah menjadi kaedah komunikasi yang penting, antaranya RabbitMQ digunakan secara meluas. Dalam bahasa Go, go-zero ialah rangka kerja yang telah muncul dalam beberapa tahun kebelakangan ini. Ia menyediakan banyak alat dan kaedah praktikal untuk membolehkan pembangun menggunakan baris gilir mesej dengan lebih mudah Di bawah ini kami akan memperkenalkan go-zero berdasarkan aplikasi praktikal dan amalan aplikasi RabbitMQ. 1.RabbitMQ Gambaran KeseluruhanArnab

    Golang RabbitMQ: Reka bentuk seni bina dan pelaksanaan sistem baris gilir mesej yang sangat tersedia Golang RabbitMQ: Reka bentuk seni bina dan pelaksanaan sistem baris gilir mesej yang sangat tersedia Sep 28, 2023 am 08:18 AM

    GolangRabbitMQ: Reka bentuk seni bina dan pelaksanaan sistem baris gilir mesej yang sangat tersedia memerlukan contoh kod khusus Pengenalan: Dengan pembangunan berterusan teknologi Internet dan aplikasinya yang meluas, baris gilir mesej telah menjadi bahagian yang amat diperlukan dalam sistem perisian moden. Sebagai alat untuk melaksanakan penyahgandingan, komunikasi tak segerak, pemprosesan toleransi kesalahan dan fungsi lain, baris gilir mesej menyediakan ketersediaan tinggi dan sokongan berskala untuk sistem teragih. Sebagai bahasa pengaturcaraan yang cekap dan ringkas, Golang digunakan secara meluas untuk membina sistem keselarasan tinggi dan berprestasi tinggi.

    See all articles