欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot實現RabbitMQ三種使用方式

 更新時間:2023年07月09日 12:12:44   作者:流殤?  
本文主要介紹了SpringBoot實現RabbitMQ三種使用方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

基于API的方式

1.使用AmqpAdmin定制消息發(fā)送組件

     @Autowired
    private AmqpAdmin amqpAdmin;
    @Test
    public void amqpAdmin(){
        //1.定義fanout類型的交換器
        amqpAdmin.declareExchange(new FanoutExchange("fanout_exchange"));
        //2.定義兩個默認持久化隊列,分別處理email和sms
        amqpAdmin.declareQueue(new Queue("fanout_queue_email"));
        amqpAdmin.declareQueue(new Queue("fanout_queue_sms"));
        //3.將隊列分別與交換器進行綁定
                                                //               隊列名             是隊列                                 交換機的名稱           路由         其它參數
        amqpAdmin.declareBinding(new Binding("fanout_queue_email",Binding.DestinationType.QUEUE,"fanout_exchange","",null));
        amqpAdmin.declareBinding(new Binding("fanout_queue_sms",Binding.DestinationType.QUEUE,"fanout_exchange","",null));
    }

2.消息發(fā)送者發(fā)送消息

創(chuàng)建實體類          

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer id;
    private String name;
}

發(fā)送消息

    @Autowired
    private RabbitTemplate re;
    @Test//消息發(fā)送者
    public void subPublisher(){
        User user = new User(1,"小滿");
        re.convertAndSend("fanout_exchange", "", user);
    }

如圖所以,如果我們直接發(fā)送的話就會報這個錯,有兩種解決方法,第一種是比較常用的讓實體類User實現序列化Serializable接口,這里我們不做演示,第二種是寫一個配置類,只有在RabbitMQ可以使用

import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMQConfig {
    //定制JSON格式的消息轉化器
    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}

加上配置類后我們發(fā)送就不會報錯了,我們也可以在RabbitMQ的可視化端口看到我們發(fā)送的消息

3.發(fā)送完消息后接下來就是消費消息了,定義接收消息的業(yè)務

import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
@Service
public class RabbitMQService {
    //發(fā)布訂閱模式: @RabbitListener可以指定當前方法監(jiān)控哪一個隊列
   @RabbitListener(queues = "fanout_queue_email")//消費者可以消費多個隊列的消息 
    public void subConsumerEmail(Message message){
        //當隊列中有內容是方法會自動執(zhí)行   推薦Object來接收
        //官網推薦Message
        byte[] body = message.getBody();//Message將數據存放在body中
        String msg = new String(body);
        System.out.println("郵件業(yè)務接收到消息:"+msg);
    }
    @RabbitListener(queues = "fanout_queue_sms") 
    public void subConsumerSms(Message message){
        byte[] body = message.getBody();
        String msg = new String(body);
        System.out.println("短信業(yè)務接收到消息:"+msg);
    }
}

4.重新運行發(fā)送端就可以接收到我們發(fā)送的數據,接收的數據可能打印在任意一個控制臺中,這是idea的機制,我們不需要管 

基于配置類的方式

1.在config配置類中定義

 
import org.springframework.amqp.core.*;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMQConfig {
    //定制JSON格式的消息轉化器
    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
   // 1.fanout創(chuàng)建一個交換機
    @Bean
    public Exchange fanoutExchange(){
        return ExchangeBuilder.fanoutExchange("fanout_exchange").build();
    }
    //2.定義消息隊列
    @Bean
    public Queue fanoutQueueEmail(){
        return new Queue("fanout_queue_email");
    }
    @Bean
    public Queue fanoutQueueSms(){
        return new Queue("fanout_queue_sms");
    }
    //3.將創(chuàng)建的隊列綁定到對應的交換機上
    @Bean
    public Binding bingingEmail(){
        return BindingBuilder.bind(fanoutQueueEmail()).to(fanoutExchange()).with("").noargs();
    }
    @Bean
    public Binding bingingSms(){
        return BindingBuilder.bind(fanoutQueueSms()).to(fanoutExchange()).with("").noargs();
    }
}

2.為了避免api的影響,我們可以在可視化端口將基于api創(chuàng)建的交換機和隊列刪除

1)刪除交換機

2)刪除隊列,前面也是點擊隊列的名字 

可以看到我已經將交換機和消息隊列都已經刪除,接下來我們重新啟動項目 ,配置類可以在啟動的時候自動創(chuàng)建

 

我們的訂閱發(fā)布模式也是可以正常運行

基于注解類的方式        

1.我們要現將基于配置類的方式注釋掉,避免影響我們測試

import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
@Service
public class RabbitMQService { 
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue("fanout_queue_email"),
            exchange=@Exchange(value = "fanout_exchange",type = "fanout")
    ))
    public void subConsumerEmail(Message message){
        //當隊列中有內容是方法會自動執(zhí)行   推薦Object來接收
        //官網推薦Message
        byte[] body = message.getBody();//Message將數據存放在body中
        String msg = new String(body);
        System.out.println("郵件業(yè)務接收到消息:"+msg);
    }
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue("fanout_queue_sms"),
            exchange=@Exchange(value = "fanout_exchange",type = "fanout")
    ))
    public void subConsumerSms(Message message){
        byte[] body = message.getBody();
        String msg = new String(body);
        System.out.println("短信業(yè)務接收到消息:"+msg);
    }
}

提前將交換機和隊列刪除,然后運行,就會發(fā)現會在啟動時會自動生成交換機和隊列,測試也不會有影響

 到此這篇關于SpringBoot實現RabbitMQ三種使用方式的文章就介紹到這了,更多相關SpringBoot RabbitMQ使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringMVC中處理Ajax請求的示例

    SpringMVC中處理Ajax請求的示例

    本篇文章給大家介紹SpringMVC中處理Ajax請求的示例,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • Java生成格式化的Word統(tǒng)計報告

    Java生成格式化的Word統(tǒng)計報告

    這篇文章主要為大家詳細介紹了如何使用Java從數據庫查詢圖書數據,并生成格式化的Word統(tǒng)計報告,文中的示例代碼講解詳細,感興趣的小伙伴可以參考一下
    2025-04-04
  • 將Arthas整合到Java業(yè)務鏡像中的流程步驟

    將Arthas整合到Java業(yè)務鏡像中的流程步驟

    在現代Java應用開發(fā)中,診斷和調試是一個不可或缺的環(huán)節(jié),Arthas,作為阿里巴巴開源的一款Java診斷工具,提供了一種在不修改代碼的情況下,實時監(jiān)控、診斷和調試Java應用程序的解決方案,本文將詳細介紹Arthas的基本概念,并逐步指導如何將其整合到Java業(yè)務鏡像中
    2025-02-02
  • 深入了解Java中的Filter過濾器

    深入了解Java中的Filter過濾器

    Filter也稱之為過濾器,WEB開發(fā)人員通過Filter技術,對web服務器管理的所有web資源:從而實現一些特殊的功能。例如實現URL級別的權限訪問控制、過濾敏感詞匯、壓縮響應信息等一些高級功能。下面我們來簡單學習一下吧
    2019-05-05
  • Spring @Configuration和@Component的區(qū)別

    Spring @Configuration和@Component的區(qū)別

    今天小編就為大家分享一篇關于Spring @Configuration和@Component的區(qū)別,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java之Maven工程打包jar

    Java之Maven工程打包jar

    Maven打包一般可以生成兩種包一種是可以直接運行的包,一種是依賴包(只是編譯包)。Maven默認打包時jar,如果需要修改其他類型,可以修改pom.xml。感興趣的同學可以參考閱讀
    2023-04-04
  • Java中的Runnable,Callable,Future,FutureTask的比較

    Java中的Runnable,Callable,Future,FutureTask的比較

    這篇文章主要介紹了Java中的Runnable,Callable,Future,FutureTask的比較的相關資料,需要的朋友可以參考下
    2017-02-02
  • SpringBoot?Bean實例化流程解析

    SpringBoot?Bean實例化流程解析

    在SpringBoot啟動過程中會執(zhí)行refreshContext()方法,而在其執(zhí)行過程中,又會調用finishBeanFactoryInitialization()方法,該方法負責了Bean的實例化,那么本文將從源碼跟讀的角度來解析一下具體流程
    2023-08-08
  • Java自定義映射resultMap定義及用法

    Java自定義映射resultMap定義及用法

    MyBatis的每一個查詢映射的返回類型都是ResultMap,當我們提供返回類型屬性是resultType時,MyBatis會自動給我們把對應值賦給resultType所指定對象的屬性,當我們提供返回類型是resultMap時,將數據庫中列數據復制到對象的相應屬性上,可以用于復制查詢,兩者不能同時用
    2022-11-11
  • 詳解Spring Boot配置排序依賴技巧

    詳解Spring Boot配置排序依賴技巧

    本篇文章主要介紹了Spring Boot配置排序依賴技巧,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11

最新評論