此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring AMQP 3.2.0! |
为不耐烦的人快速浏览
介绍
这是开始使用 Spring AMQP 的 5 分钟教程。
先决条件:安装并运行 RabbitMQ 代理 (https://www.rabbitmq.com/download.html)。 然后获取 spring-rabbit JAR 及其所有依赖项 - 最简单的方法是在构建工具中声明依赖项。 例如,对于 Maven,您可以执行类似于以下内容的操作:
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>3.2.1-SNAPSHOT</version>
</dependency>
对于 Gradle,您可以执行类似于以下操作的操作:
compile 'org.springframework.amqp:spring-rabbit:3.2.1-SNAPSHOT'
兼容性
Spring Framework 版本的最低依赖性为 6.1.0。
最低 Java 客户端库版本为 5.18.0。amqp-client
流队列的最小 Java 客户端库为 0.12.0。stream-client
非常非常快
本节提供了最快的介绍。
首先,添加以下语句,使本节后面的示例正常工作: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 客户端中也有一个。
我们在前面的代码中使用 Spring 抽象。
它缓存通道(以及可选的连接)以供重用。
我们依赖于 broker 中的 default exchange (因为 send 中没有指定),并且所有队列的名称都默认绑定到 default exchange (因此,我们可以在 send 中使用队列名称作为路由键)。
这些行为在 AMQP 规范中定义。ConnectionFactory
使用 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>
默认情况下,该声明会自动查找 , 和 类型的 bean,并代表用户向代理声明它们。
因此,您无需在简单的 Java 驱动程序中显式使用该 Bean。
有很多选项可用于配置 XML 模式中组件的属性。
您可以使用 XML 编辑器的自动完成功能来浏览它们并查看其文档。<rabbit:admin/>
Queue
Exchange
Binding
使用 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);
}
}