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

一文帶你了解RabbitMQ消息轉(zhuǎn)換器

 更新時(shí)間:2023年04月02日 09:20:00   作者:小威要向諸佬學(xué)習(xí)呀  
這篇文章主要為大家詳細(xì)介紹了RabbitMQ中消息轉(zhuǎn)換器的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下

在SpringAMQP的發(fā)送方法中,接收消息的類(lèi)型是Object,也就是說(shuō)我們可以發(fā)送任意對(duì)象類(lèi)型的消息,SpringAMQP會(huì)幫我們序列化為字節(jié)后發(fā)送。

我們以實(shí)際例子來(lái)做一個(gè)演示,首先在項(xiàng)目中的FanoutConfig配置類(lèi)聲明一個(gè)新的隊(duì)列:

package cn.itcast.mq.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FanoutConfig {
    @Bean
    public Queue objectQueue(){
        return new Queue("object.queue");
    }
}

接著我們?cè)谏a(chǎn)者模塊中編寫(xiě)發(fā)送消息的測(cè)試代碼:

package cn.itcast.mq.spring;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.HashMap;
import java.util.Map;

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringAmqpTest {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Test
    public void testSendObjectQueue(){
        Map<String,Object> msg =new HashMap<>();//創(chuàng)建一個(gè)map集合
        msg.put("name","小威");
        msg.put("age",21);
        rabbitTemplate.convertAndSend("object.queue",msg);//發(fā)送消息
    }
}

消息發(fā)送代碼編寫(xiě)完成后,重啟項(xiàng)目,打開(kāi)RabbitMQ的虛擬機(jī)對(duì)應(yīng)地址可以看到我們編寫(xiě)的name和age出現(xiàn)了特殊的情況:

這是因?yàn)镽abbitMQ只支持字節(jié)的序列化方式,spring支持發(fā)送object對(duì)象消息,由上圖可以看到content_type的轉(zhuǎn)化方式,spring將封裝的map對(duì)象序列化了一長(zhǎng)串字符串。

那么我們?cè)撊绾谓鉀Q這個(gè)問(wèn)題呢?

首先,Spring的消息對(duì)象的處理是由org.springframework.amqp.support.converter.MessageConverter來(lái)處理的。默認(rèn)實(shí)現(xiàn)是SimpleMessageConverter,基于JDK的ObjectOutputStream完成序列化。

因此,我們需要定義一個(gè)MessageConverter 類(lèi)型的Bean,可以使用json的方式序列化,在父工程中引入json的依賴(lài):

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

然后在生產(chǎn)者模塊的啟動(dòng)類(lèi)中聲明bean:

package cn.itcast.mq;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.Jackson2XmlMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class PublisherApplication {
    public static void main(String[] args) {
        SpringApplication.run(PublisherApplication.class);
    }
    @Bean
    public MessageConverter jsonMessageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}

再次重啟生產(chǎn)者模塊可以看到我們想要的消息對(duì)象結(jié)果了:

對(duì)于消費(fèi)者也同理,首選引入依賴(lài),接著在啟動(dòng)類(lèi)中編寫(xiě)和生產(chǎn)者一樣的代碼,最后定義一個(gè)消費(fèi)者監(jiān)聽(tīng)該隊(duì)列:

    @RabbitListener(queues = "object.queue")
    public void listenObjectQueue(Map<String,Object> msg){
        System.out.println("接受到object.queue的消息:"+msg);
    }

啟動(dòng)消費(fèi)者模塊可以看到控制臺(tái)輸出的結(jié)果:

到此這篇關(guān)于一文帶你了解RabbitMQ消息轉(zhuǎn)換器的文章就介紹到這了,更多相關(guān)RabbitMQ消息轉(zhuǎn)換器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 將InputStream轉(zhuǎn)化為base64的實(shí)例

    將InputStream轉(zhuǎn)化為base64的實(shí)例

    這篇文章主要介紹了將InputStream轉(zhuǎn)化為base64的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java+Selenium實(shí)現(xiàn)文件上傳下載功能詳解

    Java+Selenium實(shí)現(xiàn)文件上傳下載功能詳解

    這篇文章主要介紹了java代碼如何利用selenium操作瀏覽器上傳和下載文件功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2023-01-01
  • SpringMVC項(xiàng)目訪(fǎng)問(wèn)controller時(shí)候報(bào)404的解決

    SpringMVC項(xiàng)目訪(fǎng)問(wèn)controller時(shí)候報(bào)404的解決

    這篇文章主要介紹了SpringMVC項(xiàng)目訪(fǎng)問(wèn)controller時(shí)候報(bào)404的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot異步使用@Async的原理以及線(xiàn)程池配置詳解

    SpringBoot異步使用@Async的原理以及線(xiàn)程池配置詳解

    在項(xiàng)目中當(dāng)訪(fǎng)問(wèn)其他人的接口較慢時(shí),不想程序一直卡在耗時(shí)任務(wù)上,想程序能夠并行執(zhí)行,我們可以使用多線(xiàn)程來(lái)并行的處理任務(wù),也可以使用spring提供的異步處理方式@Async,這篇文章主要給大家介紹了關(guān)于SpringBoot異步使用@Async的原理以及線(xiàn)程池配置的相關(guān)資料
    2021-09-09
  • Java如何將處理完異常之后的程序能夠從拋出異常的地點(diǎn)向下執(zhí)行?

    Java如何將處理完異常之后的程序能夠從拋出異常的地點(diǎn)向下執(zhí)行?

    今天小編就為大家分享一篇關(guān)于Java如何將處理完異常之后的程序能夠從拋出異常的地點(diǎn)向下執(zhí)行?,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • java發(fā)送javax.mail郵件實(shí)例講解

    java發(fā)送javax.mail郵件實(shí)例講解

    這篇文章主要為大家介紹了java發(fā)送javax.mail郵件實(shí)例講解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • SpringBoot Security整合JWT授權(quán)RestAPI的實(shí)現(xiàn)

    SpringBoot Security整合JWT授權(quán)RestAPI的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot Security整合JWT授權(quán)RestAPI的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Druid如何平行替換為Hikari

    Druid如何平行替換為Hikari

    這篇文章主要介紹了Druid如何平行替換為Hikari問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java實(shí)現(xiàn)簡(jiǎn)單猜拳游戲

    Java實(shí)現(xiàn)簡(jiǎn)單猜拳游戲

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單猜拳游戲,輸入字符,不輸入數(shù)字,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 解密Java?Map如何高效地操作鍵值對(duì)

    解密Java?Map如何高效地操作鍵值對(duì)

    Map是Java中非常重要的數(shù)據(jù)結(jié)構(gòu)之一,它存儲(chǔ)鍵值對(duì),可以通過(guò)鍵快速查找對(duì)應(yīng)的值,是我們?cè)趯?shí)際開(kāi)發(fā)中使用最為頻繁的數(shù)據(jù)結(jié)構(gòu)之一,下面小編就來(lái)和大家探討一下Map是如何高效地操作鍵值對(duì)的吧
    2023-09-09

最新評(píng)論

连州市| 瑞金市| 济阳县| 昌乐县| 柘城县| 柯坪县| 措美县| 长沙县| 漳浦县| 天气| 五峰| 商水县| 阿克| 京山县| 濉溪县| 平罗县| 长垣县| 东城区| 泸溪县| 左权县| 横峰县| 石嘴山市| 和林格尔县| 三江| 沁水县| 荥经县| 九龙城区| 永安市| 四会市| 岳阳市| 西安市| 河东区| 安泽县| 虎林市| 梁山县| 林州市| 宜章县| 塔河县| 纳雍县| 米易县| 辽宁省|