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

一文帶你了解RabbitMQ消息轉換器

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

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

我們以實際例子來做一個演示,首先在項目中的FanoutConfig配置類聲明一個新的隊列:

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");
    }
}

接著我們在生產(chǎn)者模塊中編寫發(fā)送消息的測試代碼:

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)建一個map集合
        msg.put("name","小威");
        msg.put("age",21);
        rabbitTemplate.convertAndSend("object.queue",msg);//發(fā)送消息
    }
}

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

這是因為RabbitMQ只支持字節(jié)的序列化方式,spring支持發(fā)送object對象消息,由上圖可以看到content_type的轉化方式,spring將封裝的map對象序列化了一長串字符串。

那么我們該如何解決這個問題呢?

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

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

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

然后在生產(chǎn)者模塊的啟動類中聲明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)者模塊可以看到我們想要的消息對象結果了:

對于消費者也同理,首選引入依賴,接著在啟動類中編寫和生產(chǎn)者一樣的代碼,最后定義一個消費者監(jiān)聽該隊列:

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

啟動消費者模塊可以看到控制臺輸出的結果:

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

相關文章

  • SpringBoot集成mybatis連接oracle的圖文教程

    SpringBoot集成mybatis連接oracle的圖文教程

    這篇文章主要介紹了Spring Boot集成mybatis連接oracle的圖文教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 修改IDEA代碼左側折疊線顏色的操作

    修改IDEA代碼左側折疊線顏色的操作

    這篇文章主要介紹了修改IDEA代碼左側折疊線顏色的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • mybatis的動態(tài)SQL和模糊查詢實例詳解

    mybatis的動態(tài)SQL和模糊查詢實例詳解

    這篇文章主要給大家介紹了關于mybatis的動態(tài)SQL和模糊查詢的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Spring?Boot整合持久層之JPA多數(shù)據(jù)源

    Spring?Boot整合持久層之JPA多數(shù)據(jù)源

    JPA(Java Persistence API)Java 持久化 API,是 Java 持久化的標準規(guī)范,Hibernate 是持久化規(guī)范的技術實現(xiàn),而 Spring Data JPA 是在 Hibernate 基礎上封裝的一款框架
    2022-08-08
  • Java實現(xiàn)任意進制轉換

    Java實現(xiàn)任意進制轉換

    這篇文章主要為大家詳細介紹了Java實現(xiàn)任意進制轉換的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java中的?stop?the?world是什么呢

    Java中的?stop?the?world是什么呢

    這篇文章主要介紹了Java中的stop?the?world是什么呢,從字面上講,就是停止這個世界,看到這個字眼,就覺得這是可怕的事情,那到底什么是stop-the-world,本文給大家詳細講解,感興趣的朋友跟隨小編一起看看吧
    2023-05-05
  • ssm框架controller層返回json格式數(shù)據(jù)到頁面的實現(xiàn)

    ssm框架controller層返回json格式數(shù)據(jù)到頁面的實現(xiàn)

    這篇文章主要介紹了ssm框架controller層返回json格式數(shù)據(jù)到頁面的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • SpringBoot的@RestControllerAdvice作用詳解

    SpringBoot的@RestControllerAdvice作用詳解

    這篇文章主要介紹了SpringBoot的@RestControllerAdvice作用詳解,@RestContrllerAdvice是一種組合注解,由@ControllerAdvice,@ResponseBody組成,本質上就是@Component,需要的朋友可以參考下
    2024-01-01
  • Java 梳理總結關于static關鍵字常見問題

    Java 梳理總結關于static關鍵字常見問題

    static關鍵字基本概念我們可以一句話來概括:方便在沒有創(chuàng)建對象的情況下來進行調用。也就是說:被static關鍵字修飾的不需要創(chuàng)建對象去調用,直接根據(jù)類名就可以去訪問,讓我們來了解一下你可能還不知道情況
    2022-04-04
  • Java微信公眾平臺開發(fā)(8) 多媒體消息回復

    Java微信公眾平臺開發(fā)(8) 多媒體消息回復

    這篇文章主要為大家詳細介紹了Java微信公眾平臺開發(fā)第八步,微信多媒體消息回復,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評論