1. 程式人生 > >SpringBoot整合RabbitMQ(一):簡單使用

SpringBoot整合RabbitMQ(一):簡單使用

我所用的Springboot 的版本是1.5.13

先來看pom檔案:

<?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>

	<groupId>com.dai</groupId>
	<artifactId>rabbitmq-mycsdn</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>rabbitmq-mycsdn</name>
	<description>Demo project for Spring Boot</description>
        <!-- 我的springboot的版本  -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.13.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency><!-- springboot支援amqp和JMS規範 這邊RabbitMQ是amqp的實現 讀者可以嘗試使用JMS規範的ActiveMQ -->
			<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>

Pom檔案很簡單。使用IDEA能夠在建立springboot的時候自行選擇需要新增的模組,非常的方便!

在需要新增一些自己想要的依賴時(比如來個資料庫或者快取等)可以參考springboot的官方文件,裡面都有相應的依賴。

好了。看一下我們需要配置些什麼吧?

按照SpringBoot的“尿性”,關於RabbitMQ基本上都在下面這個類裡面了

@Configuration
@ConditionalOnClass({ RabbitTemplate.class, Channel.class })
@EnableConfigurationProperties(RabbitProperties.class)
@Import(RabbitAnnotationDrivenConfiguration.class)
public class RabbitAutoConfiguration {
@ConfigurationProperties(prefix = "spring.rabbitmq")
public class RabbitProperties {

下面這個是RabbitMQ的配置,基本上每個屬性都有註釋。下面我們來配置簡單的屬性配置吧。

server:
  port: 8080

spring:
  rabbitmq:
    host: 192.168.11.18
    username: guest
    password: guest
這是我的yml檔案,配置很簡單。先是配置Rabbiymq 的地址,然後是使用者名稱和密碼,這裡都用的是guest,上一個文章有講過RabbitMQ預設就是guest,這個可以在執行的時候手動指定。這邊不展開說

簡單的配置完成了,來嘗試收發簡單的訊息。

@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitmqMycsdnApplicationTests {

	@Autowired
	RabbitTemplate rabbitTemplate;

	@Test
	public void contextLoads1() {
		rabbitTemplate.convertAndSend("dai.topic","dai.test.idea","Hello,my frist Springboot integrate RabbitMQ");
		Object o =  rabbitTemplate.receiveAndConvert("dai.topic-queue");
		System.out.println(o.toString());
	}
}

這邊我使用了RabbitTemplate來收發訊息。

@Override
	public void convertAndSend(String exchange, String routingKey, final Object object) throws AmqpException {
		convertAndSend(exchange, routingKey, object, (CorrelationData) null);
	}

第一個引數是交換器的名稱,我用的是下面這個


第二個引數是路由鍵


第三個引數就是你要傳送的訊息了。

@Override
	public Object receiveAndConvert(String queueName) throws AmqpException {
		return receiveAndConvert(queueName, this.receiveTimeout);
	}

這是根據佇列的名稱來接收訊息。返回值是Object型別。

好了大致上瞭解了這兩個方法的使用,來看一下能否正常的收發訊息吧。

傳送訊息:

執行程式後來看一下:


佇列中已經有一條訊息了,看一下訊息的內容是否跟我們傳送的訊息是一致的


訊息的內容是跟我們傳送的一致,注意的點是content-type,這裡讓大家注意一下是預設的訊息型別是text/plain的,看一下我們程式收到的訊息是否也是一樣的


好了,簡單的收發訊息已經完成了。下一篇文章再來實現傳送實體類,JSON型別的資料;就是定製MessageConverter。而且我們現在這樣子來接收訊息,在開發中是很蛋疼的,我們還需要一個監聽器來監聽佇列中的新訊息呢。