Rumah > Java > javaTutorial > teks badan

Bagaimana Springboot menyepadukan baris gilir mesej RabbitMQ

WBOY
Lepaskan: 2023-05-13 22:55:13
ke hadapan
810 orang telah melayarinya

    Projek Pengeluar

    Ketergantungan POM

    Anda boleh memilih untuk menambah kebergantungan secara langsung semasa membuat projek.

    Bagaimana Springboot menyepadukan baris gilir mesej RabbitMQ

    Bagaimana Springboot menyepadukan baris gilir mesej RabbitMQ

    fail permohonan

    Oleh kerana rabbitmq mempunyai alamat lalai dan maklumat pengguna, tidak perlu meneruskan jika ia ialah konfigurasi rabbitmq tempatan.

    Bagaimana Springboot menyepadukan baris gilir mesej RabbitMQ

    Bagaimana Springboot menyepadukan baris gilir mesej RabbitMQ

    Fail konfigurasi RabbitMQ:

    Apabila menggunakan suis dan baris gilir yang berkaitan, kami memerlukan The pelaksanaan mengisytiharkan suis dan baris gilir Jika tiada maklumat yang sepadan, projek permulaan akan gagal. Oleh itu, apabila menggunakan springboot untuk menyepadukan rabbitmq, kita boleh menggunakan fail konfigurasi untuk mengisytiharkan suis dan baris gilir serta mengikat hubungan antara keduanya. Memandangkan mod Fanout sedang ditunjukkan, FanoutExchange digunakan untuk mengisytiharkan suis, dan mod lain menggunakan TopicExchange dan DirectExchange yang sepadan untuk mengisytiharkan.

    @Configuration
    public class RabbitMQConfiguration {
    
    //声明fanout模式的交换机
    @Bean
    public FanoutExchange fanoutExchange() {
        return new FanoutExchange("fanout_order_exchange", true, false);
    }
    
    //声明队列
    @Bean
    public Queue smsQueue() {
        return new Queue("sms.fanout.queue", true);
    }
    
    @Bean
    public Queue emailQueue() {
        return new Queue("email.fanout.queue", true);
    }
    
    @Bean
    public Queue duanxinQueue() {
        return new Queue("duanxin.fanout.queue", true);
    }
    //绑定
    
    @Bean
    public Binding smsBinding() {
        return BindingBuilder.bind(smsQueue()).to(fanoutExchange());
    }
    
    @Bean
    public Binding emailBinding() {
        return BindingBuilder.bind(emailQueue()).to(fanoutExchange());
    }
    
    @Bean
    public Binding duanxinBinding() {
        return BindingBuilder.bind(duanxinQueue()).to(fanoutExchange());
    }
    }
    Salin selepas log masuk
    Kod perniagaan pengeluar

    Bahagian kod ini hanya mengedarkan mesej dengan memanggil rabbitTemplate. @Service public class OrderService {

    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    public void makeOrder() {
        // 保存订单
        String orderId = UUID.randomUUID().toString();
        System.out.println("下单成功:" + orderId);
        // 通过MQ完成消息的分发
        // 参数1:交换机 ;参数2:路由key/队列名;参数3:消息内容
        String exchangeName = "fanout_order_exchange";
        rabbitTemplate.convertAndSend(exchangeName, "", orderId);
    }
    }
    Salin selepas log masuk

    Pengguna:

    Kejuruteraan pengguna adalah serupa dengan kejuruteraan pengeluar Kami perlu memperkenalkan kebergantungan, dan kemudian berkaitan dalam konfigurasi fail aplikasi untuk mula menulis kod. Dalam projek pengguna, kami juga boleh menulis fail konfigurasi rabbitmq untuk mengisytiharkan suis dan baris gilir. Adalah disyorkan untuk menulis fail konfigurasi pada bahagian pengguna, kerana bahagian pengguna adalah projek pertama yang dimulakan Jika suis dan baris gilir tidak dibuat, permulaan projek akan gagal. Mendengar mesej

    Kami mendengar baris gilir mesej melalui anotasi RabbitListener. Perlu diingatkan bahawa kami perlu menyerahkan pemantauan kepada pengurusan spring melalui anotasi Komponen, jika tidak, kami tidak boleh menerima mesej daripada pelayan seperti biasa. Hanya satu pemantauan mesej e-mel diberikan di sini. Barisan gilir duanxin dan SMS yang diisytiharkan oleh pengeluar di atas boleh dibuat sendiri. Anda hanya perlu mengubah suai nama baris gilir. @Service kelas awam OrderService {

    @RabbitListener(queues = {"email.fanout.queue"})
    @Component
    public class FanoutEmailService {
        @RabbitHandler
        public void receive(String message) {
            System.out.println("email fanout -----》接收到" + message);
        }
    }
    Salin selepas log masuk

    Ujian

    Mula-mula mulakan projek pengguna, dan kemudian buat kelas ujian dalam projek pengeluar untuk menghantar mesej.

    @SpringBootTest class SpringbootOrderRabbitmqProducerApplicationTests {
    
    @Autowired
    private OrderService orderService;
    
    @Test
    void contextLoads() {
        orderService.makeOrder();
    }
    }
    Salin selepas log masuk

    Selepas menghantar mesej, kita dapati dalam konsol bahawa pengguna berjaya menerima mesej tersebut.

    Bagaimana Springboot menyepadukan baris gilir mesej RabbitMQ

    Mod langsung

    Pengeluar

    Langkah-langkah untuk mencipta projek adalah sama seperti di atas.

    Fail konfigurasi

    Konfigurasi pada asasnya adalah sama seperti di atas Memandangkan bahagian ini menguji mod langsung, anda perlu menggunakan DirectExchange untuk mencipta suis. Perlu diingat bahawa nama kaedah dalam kelas ini tidak boleh sama dengan nama kaedah dalam fail konfigurasi rabbitmq di atas, kerana kami menggunakan anotasi kacang untuk menyerahkannya kepada pengurusan spring Jika nama adalah sama, permulaan projek akan gagal.

    @Configuration
    public class DirectRabbitMQConfiguration {
    
    //声明direct模式的交换机
    @Bean
    public DirectExchange directExchange() {
        return new DirectExchange("direct_order_exchange", true, false);
    }
    
    //声明队列
    @Bean
    public Queue smsDirectQueue() {
        return new Queue("sms.direct.queue", true);
    }
    
    @Bean
    public Queue emailDirectQueue() {
        return new Queue("email.direct.queue", true);
    }
    
    @Bean
    public Queue duanxinDirectQueue() {
        return new Queue("duanxin.direct.queue", true);
    }
    //绑定
    
    @Bean
    public Binding smsDirectBinding() {
        return BindingBuilder.bind(smsDirectQueue()).to(directExchange()).with("sms");
    }
    
    @Bean
    public Binding emailDirectBinding() {
        return BindingBuilder.bind(emailDirectQueue()).to(directExchange()).with("email");
    }
    
    @Bean
    public Binding duanxinDirectBinding() {
        return BindingBuilder.bind(duanxinDirectQueue()).to(directExchange()).with("duanxin");
    }
    }
    Salin selepas log masuk

    Kod perniagaan

    @Service
    public class OrderService {
    
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        public void makeOrderDirect() {
            // 保存订单
            String orderId = UUID.randomUUID().toString();
            System.out.println("下单成功:" + orderId);
            String exchangeName = "direct_order_exchange";
            rabbitTemplate.convertAndSend(exchangeName, "sms", orderId);
            rabbitTemplate.convertAndSend(exchangeName, "email", orderId);
        }
    
    }
    Salin selepas log masuk

    Pengguna

    Mendengar mesej

    Sama seperti di atas, hanya perhatikan nama baris gilir.

    @RabbitListener(queues = {"email.direct.queue"})
    @Component
    public class DirectEmailService {
        @RabbitHandler
        public void receive(String message) {
            System.out.println("email direct -----》接收到" + message);
        }
    }
    Salin selepas log masuk

    Mod topik

    Semua mod di atas mengisytiharkan hubungan antara suis, baris gilir dan pengikatan melalui fail konfigurasi, sebenarnya, kami juga boleh mengisytiharkannya melalui Suis anotasi dan anotasi.

    Pengeluar

    Memandangkan ia diisytiharkan menggunakan anotasi, kami tidak perlu mencipta fail konfigurasi dan boleh terus menulis kod perniagaan. Semasa menguji, kami hanya perlu mengubah suai nama laluan Untuk butiran tentang cara mengubah suai, sila pergi ke pautan pada permulaan artikel untuk melihat cara setiap mod digunakan.

    @Service
    public class OrderService {
    
    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    public void makeOrderTopic() {
        // 保存订单
        String orderId = UUID.randomUUID().toString();
        System.out.println("下单成功:" + orderId);
        String exchangeName = "topic_order_exchange";
        String routingKey = "com.email";
        rabbitTemplate.convertAndSend(exchangeName, routingKey, orderId);
    }
    }
    Salin selepas log masuk

    Pengguna

    Kod pada asasnya sama seperti di atas. Bezanya ialah kami mengikat baris gilir secara langsung dan menukar dalam anotasi RabbitListener. Perlu diingatkan bahawa rentetan digunakan dalam setiap parameter. nilai sepadan dengan baris gilir, dan parameter yang sepadan ialah nama baris gilir, kegigihan dan pemadaman automatik. Untuk suis yang sepadan dengan pertukaran, parameter yang sepadan ialah nama suis dan jenis suis. Kekunci sepadan dengan nama laluan.

    rreeee

    Atas ialah kandungan terperinci Bagaimana Springboot menyepadukan baris gilir mesej RabbitMQ. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Label berkaitan:
    sumber:yisu.com
    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
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan