Anda boleh memilih untuk menambah kebergantungan secara langsung semasa membuat projek.
Oleh kerana rabbitmq mempunyai alamat lalai dan maklumat pengguna, tidak perlu meneruskan jika ia ialah konfigurasi rabbitmq tempatan.
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()); } }
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); } }
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); } }
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(); } }
Selepas menghantar mesej, kita dapati dalam konsol bahawa pengguna berjaya menerima mesej tersebut.
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"); } }
@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); } }
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); } }
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.
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); } }
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.
rreeeeAtas ialah kandungan terperinci Bagaimana Springboot menyepadukan baris gilir mesej RabbitMQ. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!