rabbitmq怎么在springboot中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
概述
RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,或者简单地将作业队列以便让分布式服务器进行处理。
它现实了AMQP协议,并且遵循Mozilla Public License开源协议,它支持多种语言,可以方便的和spring集成。
消息队列使用消息将应用程序连接起来,这些消息通过像RabbitMQ这样的消息代理服务器在应用程序之间路由。
基本概念
Broker
用来处理数据的消息队列服务器实体
vhost
由RabbitMQ服务器创建的虚拟消息主机,拥有自己的权限机制,一个broker里可以开设多个vhost,用于不同用户的权限隔离,vhost之间是也完全隔离的。
productor
产生用于消息通信的数据
channel
消息通道,在AMQP中可以建立多个channel,每个channel代表一个会话任务。
exchange
direct
转发消息到routing-key指定的队列
fanout
fanout
转发消息到所有绑定的队列,类似于一种广播发送的方式。
topic
topic
按照规则转发消息,这种规则多为模式匹配,也显得更加灵活
queue
queue
队列是RabbitMQ的内部对象,存储消息
以动态的增加消费者,队列将接受到的消息以轮询(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 nullrabbitmq怎么在springboot中使用