rabbitmq怎么在springboot中使用

  

rabbitmq怎么在springboot中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

概述

  1. RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,或者简单地将作业队列以便让分布式服务器进行处理。

  2. 它现实了AMQP协议,并且遵循Mozilla Public License开源协议,它支持多种语言,可以方便的和spring集成。

  3. 消息队列使用消息将应用程序连接起来,这些消息通过像RabbitMQ这样的消息代理服务器在应用程序之间路由。

基本概念

Broker

用来处理数据的消息队列服务器实体

vhost

由RabbitMQ服务器创建的虚拟消息主机,拥有自己的权限机制,一个broker里可以开设多个vhost,用于不同用户的权限隔离,vhost之间是也完全隔离的。

productor

产生用于消息通信的数据

channel

消息通道,在AMQP中可以建立多个channel,每个channel代表一个会话任务。

exchange

direct

转发消息到routing-key指定的队列

rabbitmq怎么在springboot中使用fanout

fanout

转发消息到所有绑定的队列,类似于一种广播发送的方式。

rabbitmq怎么在springboot中使用topic

topic

按照规则转发消息,这种规则多为模式匹配,也显得更加灵活

rabbitmq怎么在springboot中使用queue

queue

  1.  队列是RabbitMQ的内部对象,存储消息

  2. 以动态的增加消费者,队列将接受到的消息以轮询(round-robin)的方式均匀的分配给多个消费者。

binding

表示交换机和队列之间的关系,在进行绑定时,带有一个额外的参数binding-key,来和routing-key相匹配。

consumer

监听消息队列来进行消息数据的读取

springboot下三种Exchange模式(fanout,direct,topic)实现

pom.xml中引用spring-boot-starter-amqp

& lt; dependency>   & lt;才能groupId> org.springframework.boot</groupId>   & lt;才能artifactId> spring-boot-starter-amqp</artifactId>   & lt;/dependency>

增加rabbitmq配置

春:,   rabbitmq:大敌;   主持人:大敌;localhost    ,端口:5672,   ,用户名:guest    ,密码:客人

<强>直接

直接模式一般情况下只需要定义队列使用自带交换机(defaultExchange)无需绑定交换机

, @ configuration   public  class  RabbitP2PConfigure  {,,   ,public  static  final  String  QUEUE_NAME =,“p2p-queue";   ,@ bean   public 才能;Queue 队列(),{   ,,,return  new 队列(QUEUE_NAME,,真的);   ,,}      } @RunWith (SpringRunner.class)   @SpringBootTest (classes =, BootCoreTestApplication.class)   @Slf4j   public  class  RabbitTest  {   @ autowired才能   private 才能;AmqpTemplate  amqpTemplate;      ,/* *   *,才能发送   ,*/@Test才能   public 才能;void  sendLazy (), throws  InterruptedException  {   ,,,City  City =, new 城市(234556666 l,“direct_name",,“direct_code");   ,,,amqpTemplate.convertAndSend (RabbitLazyConfigure.QUEUE_NAME,城市);   ,,}   ,,   ,/* *   *,才能领取   ,*/@Test才能   public 才能;void 接收(),throws  InterruptedException  {   ,,,Object  obj =, amqpTemplate.receiveAndConvert (RabbitLazyConfigure.QUEUE_NAME);   ,,,Assert.notNull (obj,,““);   ,,,log.debug (obj.toString ());   ,,}   }

<>强适用场景:点对点

<强>分列

分列则模式需要将多个队列绑定在同一个交换机上

@ configuration   public  class  RabbitFanoutConfigure  {   public 才能static  final  String  EXCHANGE_NAME =,“fanout-exchange";   public 才能static  final  String  FANOUT_A =,“fanout.A";   public 才能static  final  String  FANOUT_B =,“fanout.B";   public 才能static  final  String  FANOUT_C =,“fanout.C";      ,@ bean   public 才能;Queue 判断(),{   ,,,return  new 队列(FANOUT_A);   ,,}      ,@ bean   public 才能;Queue  BMessage (), {   ,,,return  new 队列(FANOUT_B);   ,,}      ,@ bean   public 才能;Queue  CMessage (), {   ,,,return  new 队列(FANOUT_C);   ,,}      ,@ bean   public 才能;FanoutExchange  fanoutExchange (), {   ,,,return  new  FanoutExchange (EXCHANGE_NAME);   ,,}      ,@ bean   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

rabbitmq怎么在springboot中使用