使用 RabbitTemplate 或 AmqpTemplate 哪一个?
Which one to use RabbitTemplate or AmqpTemplate?
我用 Spring Boot
编写了以下程序,运行良好。但是,问题是我不确定我应该使用 RabbitTemplate
还是 AmqpTemplate
。一些在线 examples/tutorials 使用 RabbitTemplate
而其他人使用 AmqpTemplate
。
请指导什么是最佳实践以及应该使用哪一个。
@SpringBootApplication
public class BasicApplication {
private static RabbitTemplate rabbitTemplate;
private static final String QUEUE_NAME = "helloworld.q";
//this definition of Queue is required in RabbitMQ. Not required in ActiveMQ
@Bean
public Queue queue() {
return new Queue(QUEUE_NAME, false);
}
public static void main(String[] args) {
try (ConfigurableApplicationContext ctx = SpringApplication.run(BasicApplication.class, args)) {
rabbitTemplate = ctx.getBean(RabbitTemplate.class);
rabbitTemplate.convertAndSend(QUEUE_NAME, "Hello World !");
}
}
}
AmqpTemplate 是一个接口。 RabbitTemplate 是 AmqpTemplate 接口的实现。你应该使用 RabbitTemplate。
在大多数情况下,对于 Spring bean,我建议使用接口,以防 Spring 出于任何原因创建 JDK 代理。这对于 RabbitTemplate
来说是不寻常的,所以你使用哪个并不重要。
在某些情况下,您可能需要 RabbitTemplate
上没有出现在界面上的方法;这将是您需要使用它的另一种情况。
不过,一般来说,最佳做法是让用户代码使用接口,这样您就不会对实现产生硬依赖。
我用 Spring Boot
编写了以下程序,运行良好。但是,问题是我不确定我应该使用 RabbitTemplate
还是 AmqpTemplate
。一些在线 examples/tutorials 使用 RabbitTemplate
而其他人使用 AmqpTemplate
。
请指导什么是最佳实践以及应该使用哪一个。
@SpringBootApplication
public class BasicApplication {
private static RabbitTemplate rabbitTemplate;
private static final String QUEUE_NAME = "helloworld.q";
//this definition of Queue is required in RabbitMQ. Not required in ActiveMQ
@Bean
public Queue queue() {
return new Queue(QUEUE_NAME, false);
}
public static void main(String[] args) {
try (ConfigurableApplicationContext ctx = SpringApplication.run(BasicApplication.class, args)) {
rabbitTemplate = ctx.getBean(RabbitTemplate.class);
rabbitTemplate.convertAndSend(QUEUE_NAME, "Hello World !");
}
}
}
AmqpTemplate 是一个接口。 RabbitTemplate 是 AmqpTemplate 接口的实现。你应该使用 RabbitTemplate。
在大多数情况下,对于 Spring bean,我建议使用接口,以防 Spring 出于任何原因创建 JDK 代理。这对于 RabbitTemplate
来说是不寻常的,所以你使用哪个并不重要。
在某些情况下,您可能需要 RabbitTemplate
上没有出现在界面上的方法;这将是您需要使用它的另一种情况。
不过,一般来说,最佳做法是让用户代码使用接口,这样您就不会对实现产生硬依赖。