SpringBoot整合RabbitMQ(一):簡單使用
阿新 • • 發佈:2019-01-27
我所用的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。而且我們現在這樣子來接收訊息,在開發中是很蛋疼的,我們還需要一個監聽器來監聽佇列中的新訊息呢。