最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot實(shí)現(xiàn)RabbitMQ三種使用方式

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

基于API的方式

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

     @Autowired
    private AmqpAdmin amqpAdmin;
    @Test
    public void amqpAdmin(){
        //1.定義fanout類型的交換器
        amqpAdmin.declareExchange(new FanoutExchange("fanout_exchange"));
        //2.定義兩個(gè)默認(rèn)持久化隊(duì)列,分別處理email和sms
        amqpAdmin.declareQueue(new Queue("fanout_queue_email"));
        amqpAdmin.declareQueue(new Queue("fanout_queue_sms"));
        //3.將隊(duì)列分別與交換器進(jìn)行綁定
                                                //               隊(duì)列名             是隊(duì)列                                 交換機(jī)的名稱           路由         其它參數(shù)
        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)建實(shí)體類          

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ā)送的話就會(huì)報(bào)這個(gè)錯(cuò),有兩種解決方法,第一種是比較常用的讓實(shí)體類User實(shí)現(xiàn)序列化Serializable接口,這里我們不做演示,第二種是寫一個(gè)配置類,只有在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格式的消息轉(zhuǎn)化器
    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}

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

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

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可以指定當(dāng)前方法監(jiān)控哪一個(gè)隊(duì)列
   @RabbitListener(queues = "fanout_queue_email")//消費(fèi)者可以消費(fèi)多個(gè)隊(duì)列的消息 
    public void subConsumerEmail(Message message){
        //當(dāng)隊(duì)列中有內(nèi)容是方法會(huì)自動(dòng)執(zhí)行   推薦Object來(lái)接收
        //官網(wǎng)推薦Message
        byte[] body = message.getBody();//Message將數(shù)據(jù)存放在body中
        String msg = new String(body);
        System.out.println("郵件業(yè)務(wù)接收到消息:"+msg);
    }
    @RabbitListener(queues = "fanout_queue_sms") 
    public void subConsumerSms(Message message){
        byte[] body = message.getBody();
        String msg = new String(body);
        System.out.println("短信業(yè)務(wù)接收到消息:"+msg);
    }
}

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

基于配置類的方式

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格式的消息轉(zhuǎn)化器
    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
   // 1.fanout創(chuàng)建一個(gè)交換機(jī)
    @Bean
    public Exchange fanoutExchange(){
        return ExchangeBuilder.fanoutExchange("fanout_exchange").build();
    }
    //2.定義消息隊(duì)列
    @Bean
    public Queue fanoutQueueEmail(){
        return new Queue("fanout_queue_email");
    }
    @Bean
    public Queue fanoutQueueSms(){
        return new Queue("fanout_queue_sms");
    }
    //3.將創(chuàng)建的隊(duì)列綁定到對(duì)應(yīng)的交換機(jī)上
    @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)建的交換機(jī)和隊(duì)列刪除

1)刪除交換機(jī)

2)刪除隊(duì)列,前面也是點(diǎn)擊隊(duì)列的名字 

可以看到我已經(jīng)將交換機(jī)和消息隊(duì)列都已經(jīng)刪除,接下來(lái)我們重新啟動(dòng)項(xiàng)目 ,配置類可以在啟動(dòng)的時(shí)候自動(dòng)創(chuàng)建

 

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

基于注解類的方式        

1.我們要現(xiàn)將基于配置類的方式注釋掉,避免影響我們測(cè)試

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){
        //當(dāng)隊(duì)列中有內(nèi)容是方法會(huì)自動(dòng)執(zhí)行   推薦Object來(lái)接收
        //官網(wǎng)推薦Message
        byte[] body = message.getBody();//Message將數(shù)據(jù)存放在body中
        String msg = new String(body);
        System.out.println("郵件業(yè)務(wù)接收到消息:"+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è)務(wù)接收到消息:"+msg);
    }
}

提前將交換機(jī)和隊(duì)列刪除,然后運(yùn)行,就會(huì)發(fā)現(xiàn)會(huì)在啟動(dòng)時(shí)會(huì)自動(dòng)生成交換機(jī)和隊(duì)列,測(cè)試也不會(huì)有影響

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

相關(guān)文章

  • SpringBoot-Session管理問(wèn)題及處理

    SpringBoot-Session管理問(wèn)題及處理

    本文介紹了SpringBoot中Session管理的多種實(shí)現(xiàn)方式,包括內(nèi)存、Redis、數(shù)據(jù)庫(kù)和緩存等,并詳細(xì)分析了Session失效、并發(fā)訪問(wèn)、共享、數(shù)據(jù)丟失和性能問(wèn)題,以及相應(yīng)的解決策略,如延長(zhǎng)超時(shí)時(shí)間、使用分布式Session、優(yōu)化存取頻率和確保Session安全等
    2026-04-04
  • Java list foreach修改元素方式

    Java list foreach修改元素方式

    這篇文章主要介紹了Java list foreach修改元素方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java中常用的四種引用類型詳解

    Java中常用的四種引用類型詳解

    Java中常用的四種引用類型,分別為,強(qiáng)引用、軟引用、弱引用以及虛引用,這篇文章主要為大家介紹了這四種引用的用法,需要的可以參考一下
    2023-06-06
  • 微服務(wù)之Feign的介紹與使用小結(jié)

    微服務(wù)之Feign的介紹與使用小結(jié)

    Feign 是一個(gè)聲明式的偽RPC的REST客戶端,它用了基于接口的注解方式,很方便的客戶端配置,Spring Cloud 給 Feign 添加了支持Spring MVC注解,并整合Ribbon及Eureka進(jìn)行支持負(fù)載均衡,這篇文章主要介紹了微服務(wù)之Feign的介紹與使用,需要的朋友可以參考下
    2022-07-07
  • Java 中通過(guò) key 獲取鎖的方法

    Java 中通過(guò) key 獲取鎖的方法

    這篇文章主要介紹了Java 中通過(guò) key 獲取鎖,本文演示如何對(duì)某個(gè) key 加鎖,以保證對(duì)該 key 的并發(fā)操作限制,可以實(shí)現(xiàn)同一個(gè) key 一個(gè)或者多個(gè)線程同時(shí)執(zhí)行,需要的朋友可以參考下
    2022-11-11
  • SqlSession的創(chuàng)建與生命周期源碼解讀

    SqlSession的創(chuàng)建與生命周期源碼解讀

    文章解析了MyBatis?SqlSession的核心作用、工廠模式、Executor類型及生命周期管理,說(shuō)明其設(shè)計(jì)優(yōu)勢(shì)與性能優(yōu)化,為后續(xù)源碼分析奠定基礎(chǔ),本文給大家詳細(xì)介紹SqlSession的創(chuàng)建與生命周期,感興趣的朋友一起看看吧
    2025-09-09
  • Java如何將ResultSet結(jié)果集遍歷到List中

    Java如何將ResultSet結(jié)果集遍歷到List中

    這篇文章主要介紹了Java如何將ResultSet結(jié)果集遍歷到List中問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 剖析SpringCloud Feign中所隱藏的坑

    剖析SpringCloud Feign中所隱藏的坑

    這篇文章主要為大家介紹了剖析SpringCloud Feign中所隱藏的坑示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Java使用WebView實(shí)現(xiàn)桌面程序的技術(shù)指南

    Java使用WebView實(shí)現(xiàn)桌面程序的技術(shù)指南

    在現(xiàn)代軟件開發(fā)中,許多應(yīng)用需要在桌面程序中嵌入 Web 頁(yè)面,例如,你可能需要在 Java 桌面應(yīng)用中嵌入一部分 Web 前端,或者加載一個(gè) HTML5 界面以增強(qiáng)用戶體驗(yàn),所以本文給大家介紹了Java使用WebView實(shí)現(xiàn)桌面程序的技術(shù)指南,需要的朋友可以參考下
    2025-05-05
  • SpringBoot結(jié)合Redis實(shí)現(xiàn)序列化的方法詳解

    SpringBoot結(jié)合Redis實(shí)現(xiàn)序列化的方法詳解

    Spring提供了一個(gè)RedisTemplate來(lái)進(jìn)行對(duì)Redis的操作,但是RedisTemplate默認(rèn)配置的是使用Java本機(jī)序列化。如果要對(duì)對(duì)象操作,就不是那么的方便。所以本文為大家介紹了另一種SpringBoot結(jié)合Redis實(shí)現(xiàn)序列化的方法,需要的可以參考一下
    2022-06-06

最新評(píng)論

工布江达县| 广灵县| 亳州市| 辰溪县| 峨眉山市| 云安县| 光泽县| 桦南县| 玛纳斯县| 阿克陶县| 张家口市| 石屏县| 金湖县| 岗巴县| 仙居县| 会理县| 锡林郭勒盟| 巴塘县| 华蓥市| 九寨沟县| 秦安县| 宁晋县| 莒南县| 海丰县| 桂阳县| 滕州市| 星子县| 光泽县| 石楼县| 千阳县| 泸溪县| 临高县| 炉霍县| 禹城市| 乌兰县| 博客| 云南省| 常宁市| 寿阳县| 长沙县| 丰台区|