SpringBoot学习之路---使⽤RabbitTemplate操作RabbitMq
在学习了RabbitMq之后,我们知道当打开RabbitMq服务时,访问15672端⼝可以进⼊web管理界⾯,并且可以在⾥⾯操作,如发送消息,从某个队列中接受消息。但是我们平时在程序实际运⾏中,不可能⼀直⼿动地来完成这些操作(因为我们不知道什么时候需要发送接受消息,⽽且这样效率很低)。在基于消息队列的程序中,我们需要编写程序来完成从消息队列⾃动收发消息的操作,这⼀篇就来记录怎么使⽤java来完成这⼀操作
在此之前我们现在web管理界⾯创建好⼀些exchange和queue,并且绑定好它们之间的路由规则。
exchange:
queue:
绑定规则这⾥略。
接着需要引⼊⼀个maven依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit-test</artifactId>
<scope>test</scope>
</dependency>
引⼊之后就可以操作RabbitMq了,这⾥要介绍⼀个类RabbitTemplate,顾名思义,这个类的作⽤和JdbcTemplate、RedisTemplate作⽤⼤致相同,只不过操作的是RabbitMq。接下来我们就要去使⽤它。
在我们引⼊maven相关依赖后,SpringBoot会⾃动帮我们注⼊RabbitTemplate,在RabbitAutoConfiguration中可以看到相关源码:
jdk怎么使用
@Bean//帮我们注⼊了该对象,可以直接使⽤
@ConditionalOnSingleCandidate(ConnectionFactory.class)
@ConditionalOnMissingBean({RabbitOperations.class})
public RabbitTemplate rabbitTemplate(RabbitProperties properties, ObjectProvider<MessageConverter> messageConverter, ObjectProvider<RabbitR etryTemplateCustomizer> retryTemplateCustomizers, ConnectionFactory connectionFactory){
在测试类中编写⽅法进⾏测试:
@SpringBootTest
class SpringRabbitmqApplicationTests {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
void contextLoads(){
}
}
rabbitTemplate的convertAndSend()⽅法可以给指定队列发送消息,函数有三个参数,第⼀个是**交换机(exchange)的名字,第⼆个是路由键(routing-key)**的名字,第三个则为消息的内容。 我们这⾥给名叫exchange.direct的交换机发送⼀个User对象,其中路由键为leslie,因为交换机类型是direct,所以是点对点的消息队列,只会发送到名叫leslie的队列中,运⾏程序,去web管理界⾯查看是否发送成功:
可以看到消息以及发送成功了,只不过它把我们消息的内容序列化了,这⾥因为它默认使⽤的还是jdk的序列化,和之前介绍redis时⼀样,我们需要把它的默认序列化器更改为json类型的序列化器(可以翻看以前的博客)。
这⾥直接说⽅法,直接编写⼀个配置类,并往容器内注⼊MessageConverter接⼝的实现类对象:
@Configuration
public class RabbitMqConfiguration {
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
其中返回的Jackson2JsonMessageConverter其实就是我们需要的json类型的序列化器,当容器中有MessageConverter类型的组件
时,SpringBoot就会调⽤我们⾃⼰编写的序列化器了,接着在运⾏⼀次,在web管理界⾯查看消息:
可以看到以及成功转为json类型的数据了,这样观看更加直观。
接着介绍RabbitTemplate的另外⼀个⽅法,我们说完发消息,那肯定需要⼀个取消息了,receiveAndConvert()⽅法⽤来取消息,⾥⾯有⼀个参数是队列(queue)的名字,表⽰要从那个队列中取
数据
在测试⽅法的后⾯加上:
Object leslie = iveAndConvert("leslie");
System.out.println(leslie);
它的返回值是object类型的,当然也可以强转,这⾥就省略了,我们看看运⾏,看看控制台是否有显⽰:
可以看到操作成功.
在导⼊maven相关依赖后,它不仅帮我们注⼊了RabbitTemplate对象⽤来操作RabbitMq发送接受消息,还帮我们注⼊了AcmqAdmin对象⽤来管理RabbitMq,它的作⽤是创建⼀些exchange、queue或者移动,删除它们。具体的操作可以查看它类上的⽅法命名去使⽤它们,这⾥不做介绍了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论