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