怎么在春天中使用RabbitMQ传递消息?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强>构建强>
构建一个使用弹簧AMQP发布消息的应用程序,RabbitTemplate并使用POJO订阅消息MessageListenerAdapter。
<强>创建兔子MQ消息接收器强>
使用任何基于消息传递的应用程序,您需要创建一个响应已发布消息的接收器。
@Slf4j @ component public class  Receiver { ,private CountDownLatch latch =, new CountDownLatch (1); ,public void  receiveMessage (String 消息){ log.info才能(“Received  & lt;,,, +, message +,“,在“); latch.countDown才能(); ,} ,public CountDownLatch  getLatch () { return 才能;插销; ,} }
接收器是一个简单的POJO,它定义了一种接收消息的方法。当您注册它以接收消息时,您可以将其命名为任何您想要的名称。
为方便起见,这个POJO也有一个CountDownLatch。这允许它发信号通知接收到消息。这是您不太可能在生产应用程序中实现的。
<强>注册监听器并发送消息强>
春AMQP RabbitTemplate提供了使用RabbitMQ发送和接收消息所需的一切。具体来说,你需要配置:
- <李>
消息侦听器容器
李> <李>声明队列,交换以及它们之间的绑定
李> <李>用于发送一些消息以测试侦听器的组件
李>弹簧引导会自动创建连接工厂和RabbitTemplate,从而减少您必须编写的代码量。
您将使用RabbitTemplate发送消息,并将接收机使用消息侦听器容器注册,以接收消息。连接工厂驱动两者,允许它们连接到RabbitMQ服务器。
@SpringBootApplication public class  RabbitmqApplication { ,static final  String topicExchangeName =,“spring-boot-exchange"; ,static final  String queueName =,“spring-boot"; ,@ bean ,Queue 队列(){ ,return new 队列(queueName,,假); ,} ,@ bean ,TopicExchange 交换(){ ,return new  TopicExchange (topicExchangeName); ,} ,@ bean ,Binding 绑定(Queue 队列,TopicExchange 交换){ ,return BindingBuilder.bind(队列),(交换);(“foo.bar。#“); ,} ,@ bean ,SimpleMessageListenerContainer 容器(ConnectionFactory connectionFactory, ,,MessageListenerAdapter listenerAdapter) { ,SimpleMessageListenerContainer container =, new SimpleMessageListenerContainer (); ,container.setConnectionFactory (connectionFactory); ,container.setQueueNames (queueName); ,container.setMessageListener (listenerAdapter); ,return 集装箱; ,} ,@ bean ,MessageListenerAdapter listenerAdapter (Receiver 接收机){ ,return new  MessageListenerAdapter(接收机,“receiveMessage"); ,} ,public static  void main (String [], args), { ,SpringApplication.run (RabbitmqApplication.class, args) .close (); ,} }
@SpringBootApplication是一个便利注释,添加了以下所有内容:
- <李>
@ configuration标记该类作为应用程序上下文的bean定义的源。
李> <李>@EnableAutoConfiguration告诉弹簧引导开始根据类路径设置,其他豆和各种属性设置添加豆。
李> <李>通常你会添加@EnableWebMvc一个Spring MVC应用程序,但春天引导会在类路径上看到spring-webmvc时自动添加它。这会将应用程序标记为Web应用程序并激活关键行为,例如设置DispatcherServlet。
李> <李>@ComponentScan告诉春天在包中寻找其他组件,配置和服务你好,允许它找到控制器。
李>该主要()方法使用弹簧引导的SpringApplication.run()方法来启动应用程序。您是否注意到没有一行XML ?也没有Web . XML文件。此网页应用程序是100%纯Java,您无需处理配置任何管道或基础结构。
listenerAdapter()方法中定义的bean在定义的容器中注册为消息侦听器容器()。它将侦听“spring-boot”队列中的消息。因为接收该类是POJO,所以需要将其包装在MessageListenerAdapter指定要调用的位置receiveMessage。
JMS队列和AMQP队列具有不同的语义。例如,JMS仅向一个使用者发送排队的消息。虽然AMQP队列执行相同的操作,但AMQP生成器不会直接向队列发送消息。相反,消息被发送到交换机,交换机可以转到单个队列,或扇出到多个队列,模仿JMS主题的概念。