前面有幾篇文章對RabbitMQ基本原理做了介紹,此篇文章記錄一下RabbitMQ在Springboot項目中簡單的集成使用。
1.創建springboot項目,引入rabbitmq和web依賴
-
引入
rabbitmq
依賴之後,springboot會自動配置rabbitmq
,可以從RabbitAutoConfiguration
類中查看自動配置情況:2.1 其中有rabbitmq的連接工廠類
2.2 另外還有一個比較重要的RabbitTemplate
bean對象,此對象是用來操作rabbitmq進行發送接收消息的模板,作用類似於redis中的redisTemplate
。
2.3 從RabbitAutoConfiguration
自動配置類中可以看到還有RabbitProperties
也就是rabbitmq
的配置類,其中有對於rabbitmq
的默認配置信息。
3.在配置文件application.properties
中配置rabbitmq
spring.rabbitmq.host=47.93.181.229
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
4.使用RabbitTemplate
操作rabbitmq
發送接收消息
package org.magic.rabbitmq;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class RabbitmqApplicationTests {
private static final String EXCHANGE_DIRECT = "exchange.direct";
@Autowired
private RabbitTemplate rabbitTemplate;
/**
* 發送String 類型的消息
*/
@Test
void sendMsg() {
String msg = "這是項目中發送的一條測試消息~";
rabbitTemplate.convertAndSend(EXCHANGE_DIRECT, "javamagic.news", msg);
}
/**
* 接收String類型的消息
*/
@Test
void getMsg() {
Object o = rabbitTemplate.receiveAndConvert("javamagic.news");
System.out.println(o.getClass());
System.out.println(o);
}
}
5.如果想要發送的消息是一個對象類型的:
/**
* 發送 對象 類型的消息
*/
@Test
void sendObjMsg() {
rabbitTemplate.convertAndSend(EXCHANGE_DIRECT,"javamagic.news",new Book("三國演義","羅貫中"));
}
如果發送到rabbitmq中,通過web控制面板可以看到rabbitmq將Book
對象進行序列化了:
因爲rabbitmqTemplate
默認的消息轉換器使用的就是jdk序列化規則:
private MessageConverter messageConverter = new SimpleMessageConverter();
而消息轉換器的實現類型有很多種:
我們也可以選擇使用json形式的消息轉換器進行序列化,
@Configuration
public class ConverterConfig {
@Bean
public MessageConverter messageConverter() {
return new Jackson2JsonMessageConverter();
}
}
這裏我們自己可以指定消息轉換器使用json的方式進行序列化,rabbitmaTemplate
源碼中由於我們現在自己指定了messageConverter
爲Jackson2JsonMessageConverter
,所以現在的消息序列化方式就是json形式。
此時我們再次發送一個Book
對象的消息,從web控制面板中可以看出,自定義json序列化方式配置成功:
當我們獲取消息的時候: