面向急於求成者的快速入門
簡介
這是 Spring AMQP 的五分鐘快速入門指南。
先決條件:安裝並執行 RabbitMQ 訊息代理 (https://www.rabbitmq.com/download.html)。然後獲取 spring-rabbit JAR 及其所有依賴項 — 最簡單的方法是在您的構建工具中宣告一個依賴項。例如,對於 Maven,您可以這樣做:
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>4.0.0</version>
</dependency>
對於 Gradle,您可以這樣做:
compile 'org.springframework.amqp:spring-rabbit:4.0.0'
相容性
Spring Framework 的最低版本依賴為 6.1.0。
amqp-client Java 客戶端庫的最低版本是 5.18.0。
用於流佇列的 stream-client Java 客戶端庫的最低版本是 0.12.0。
非常,非常快速
本節提供最快的入門介紹。
首先,新增以下 import 語句以使本節後面的示例能夠正常工作:
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
以下示例使用純命令式 Java 傳送和接收訊息:
ConnectionFactory connectionFactory = new CachingConnectionFactory();
AmqpAdmin admin = new RabbitAdmin(connectionFactory);
admin.declareQueue(new Queue("myqueue"));
AmqpTemplate template = new RabbitTemplate(connectionFactory);
template.convertAndSend("myqueue", "foo");
String foo = (String) template.receiveAndConvert("myqueue");
請注意,原生 Java Rabbit 客戶端中也有一個 ConnectionFactory。在前面的程式碼中,我們使用了 Spring 的抽象。它快取通道(並可選地快取連線)以供重用。我們依賴於代理中的預設交換(因為在傳送時未指定),以及所有佇列透過其名稱到預設交換的預設繫結(因此,我們可以在傳送時使用佇列名稱作為路由鍵)。這些行為在 AMQP 規範中定義。
使用 XML 配置
以下示例與前面的示例相同,但將資源配置外部化到 XML 中:
ApplicationContext context =
new GenericXmlApplicationContext("classpath:/rabbit-context.xml");
AmqpTemplate template = context.getBean(AmqpTemplate.class);
template.convertAndSend("myqueue", "foo");
String foo = (String) template.receiveAndConvert("myqueue");
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xsi:schemaLocation="http://www.springframework.org/schema/rabbit
https://www.springframework.org/schema/rabbit/spring-rabbit.xsd
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<rabbit:connection-factory id="connectionFactory"/>
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory"/>
<rabbit:admin connection-factory="connectionFactory"/>
<rabbit:queue name="myqueue"/>
</beans>
預設情況下,<rabbit:admin/> 宣告會自動查詢 Queue、Exchange 和 Binding 型別的 bean,並代表使用者將它們宣告到代理。因此,在簡單的 Java 驅動程式中,您無需顯式使用該 bean。在 XML 模式中,有許多選項可以配置元件的屬性。您可以使用 XML 編輯器的自動完成功能來探索它們並檢視其文件。
使用 Java 配置
以下示例重複了前面的示例,但將外部配置定義在 Java 中:
ApplicationContext context =
new AnnotationConfigApplicationContext(RabbitConfiguration.class);
AmqpTemplate template = context.getBean(AmqpTemplate.class);
template.convertAndSend("myqueue", "foo");
String foo = (String) template.receiveAndConvert("myqueue");
........
@Configuration
public class RabbitConfiguration {
@Bean
public CachingConnectionFactory connectionFactory() {
return new CachingConnectionFactory("localhost");
}
@Bean
public RabbitAdmin amqpAdmin() {
return new RabbitAdmin(connectionFactory());
}
@Bean
public RabbitTemplate rabbitTemplate() {
return new RabbitTemplate(connectionFactory());
}
@Bean
public Queue myQueue() {
return new Queue("myqueue");
}
}
使用 Spring Boot 自動配置和非同步 POJO 監聽器
Spring Boot 會自動配置基礎設施 bean,如下例所示:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public ApplicationRunner runner(AmqpTemplate template) {
return args -> template.convertAndSend("myqueue", "foo");
}
@Bean
public Queue myQueue() {
return new Queue("myqueue");
}
@RabbitListener(queues = "myqueue")
public void listen(String in) {
System.out.println(in);
}
}