怎么在春天中使用RabbitMQ传递消息

  介绍

怎么在春天中使用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主题的概念。

怎么在春天中使用RabbitMQ传递消息