SpringBoot簡單使用RabbitMQ消息組件

1 在虛擬機中安裝rabbitmq 2 開啓rabbitmq 3 頁面查看rabbitmq java

3 rabbitmq相關知識點講解 [1]web

MQ全稱爲Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通訊方法。MQ是消費-生產者模型的一個典型的表明,一端往消息隊列中不斷寫入消息,而另外一端則能夠讀取隊列中的消息。redis

一、隊列、生產者、消費者spring

隊列:mq內部存儲信息的
生產者:產生信息的
消費者:消費消息的

二、Exchange、Binding exchange:交換器,交換按照必定規則與對列綁定,消息才能到queue中 Binding用routing keyapache

三、Exchange Type有四種json

RabbitMQ經常使用的Exchange Type有三種:fanout、direct、topic。headers不經常使用。

  fanout:把全部發送到該Exchange的消息投遞到全部與它綁定的隊列中。將消息發送與該exchange綁定的全部的對列,不須要比較路由鍵

  direct:把消息投遞到那些binding key與routing key徹底匹配的隊列中。要求路由鍵與對列名徹底匹配

  topic:將消息路由到binding key與routing key模式匹配的隊列中。用#匹配0或者多個,*匹配一個

4 下面簡單實現下圖的結果app

1 建立direct類型的交換器maven

2 建立 fanout類型的交換器 ide

3 建立 topic類型的交換器spring-boot

4 建立的結果

5 建立對列,如下圖爲例子

隊列建立完成

6 綁定隊列direct類型例子

7 綁定fanout類型的例子

8 綁定topic類型的例子

9 測試direct類型的交換器

測試結果

10 測試 fanout類型的交換器

測試結果

11 測試topic 類型的交換器

5 在springBoot項目下使用RabbitMq

pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	 
<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>org.springframework.boot</groupId>
	
    <artifactId>spring-boot-starter-parent</artifactId>
	
    <version>2.1.6.RELEASE</version>
	
    <relativePath/> <!-- lookup parent from repository -->
	
</parent>

<groupId>com.mao</groupId>

<artifactId>spring-01-amqp</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>spring-01-amqp</name>

<description>Demo project for Spring Boot</description>

<properties>

    <java.version>1.8</java.version>
	
</properties>

<dependencies>

    <dependency>
	
        <groupId>org.springframework.boot</groupId>
		
        <artifactId>spring-boot-starter-amqp</artifactId>
		
    </dependency>
	
    <dependency>
	
        <groupId>org.springframework.boot</groupId>
		
        <artifactId>spring-boot-starter-web</artifactId>
		
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
		
        <artifactId>spring-boot-starter-test</artifactId>
		
        <scope>test</scope>
		
    </dependency>
	
</dependencies>

<build>
    <plugins>
        <plugin>
		
            <groupId>org.springframework.boot</groupId>
			
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

</project>

applicaton.properties配置

spring.rabbitmq.host=192.168.1.139

spring.datasource.password=guest

spring.datasource.username=guest

book實體

public class book {

private String bookName;

private String author;

public book(String bookName, String author) {

    this.bookName = bookName;
	
    this.author = author;
}

public book() {
}

public String getAuthor() {
    return author;
}

public void setAuthor(String author) {
    this.author = author;
}

public String getBookName() {
    return bookName;
}

public void setBookName(String bookName) {
    this.bookName = bookName;
}

[@Override](https://my.oschina.net/u/1162528)
public String toString() {
    return "book{" +
            "bookName='" + bookName + '\'' +
            ", author='" + author + '\'' +
            '}';
}

}

測試發送數據代碼 @Test public void contextLoads() {

//message須要本身構造一個,定義消息體內容和消息頭
	
  //  rabbitTemplate.send(exchange,roteKey,message);
  
    //只須要傳入要發送的對象,自動序列化發送給rabbitmq,對象被默認序列化後發送
	
    Map<String,Object> map= new HashMap<>();
	
    map.put("msg","這是第一個消息");
	
    map.put("data", Arrays.asList("hello","wored","rabbitmq"));
	
    rabbitTemplate.convertAndSend("exchange.direct","mao.news",new book("少年","天機"));
}

  /**
 採用廣播的方式
 **/
[@Test](https://my.oschina.net/azibug)
public void senMsg(){

    rabbitTemplate.convertAndSend("exchange.fanout","",new book("少年","落非"));
}

接收數據測試

  //接收數據
  
[@Test](https://my.oschina.net/azibug)

public void receive(){

    Object o=rabbitTemplate.receiveAndConvert("mao.news");
	
    System.out.println(o.getClass());
	
    System.out.println(o);
	
}
上面測試有個問題,在管理界面顯示的是序列化的數據

下面來解決該問題

下面這樣就能夠以json格式顯示,與以前的一篇博客相似,配置自定義redis配置

@Configuration

public class myamqpconfig { @Bean public MessageConverter messageConverter(){

return new Jackson2JsonMessageConverter();
}

}

使用下面的就能夠收到消息

@Service

public class BookService {

@RabbitListener(queues = "mao.news")

public  void receive(book book1){

    System.out.println("收到消息:"+book1.toString());
	

}

本身測試相關結果

參考文獻: [1] https://blog.csdn.net/dreamchasering/article/details/77653512

相關文章
相關標籤/搜索