RabbitMQ在SpringBoot中的应用
1.简单模式
P:生产者,要发送消息的程序.
C:消费者,消息的接收者.
Queue:消息队列,类似于一个邮箱,生产者向其中投递消息,消费者从其中取出消息.
特点:一个生产者P,一个消费者C,消息只能被消费一次,也成为点对点模式.
适用场景:消息只能被单个消费者处理.
设置队列的名称为simple.queue
设置一个叫simple.queue的队列
设置生产者
设置消费者
2.工作队列
一个生产者P,多个消费者C1,C2...消费者从同一个队列中获取信息,消息不会重复,会发送给不同的消费者.使用与在集群环境中做异步处理.
这里使生产者向队列发送10条消息.
设置两个消费者从指定队列中获取消息.
实现的结果如下:
可以看到消费者依次从work.queue这个队列中消费消息,且消息不会重复.
3.发布订阅模式.
这里与前面不同的是,这个图中体现出了,交换机(Exchange)
交换机:生产者首先会将消息发送到Exchange,由交换机将消息按照一定的规则路由到一个或者多个队列中.RabbitMQ交换机有四种类型,fanout,direct,topic,headers,不同类型有着不同的路由策略.Fanout:广播,将消息交给所有绑定到交换机的队列(Publish/Subscribe模式) Direct:定向,把消息交给符合指定routing key的队列(routing模式) Topic:通配符,把消息交给符合 routing pattern(路由模式)的队列.headers类型的交换机不依赖与路由键的匹配规则来路由消息,而是根据发送的内容中的headers属性进行匹配,性能较差,基本上不会见到它的存在.Exchange(交换机),只负责转发消息,不具备存储消息的能力,因此,如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,就会导致消息的丢失.
这里介绍的是Publish/Subscribe模式,一个生产者P,多个消费者C1,C2,X表示交换机,这种模式中,生产者P向交换机发送消息,经过交换机,会被路由到Q1,Q2两个队列.消费者C1,C2收到的信息完全相同.这种模式适用于相同消息需要被多个消费者接受的场景
声明队列和声明交换机以及交换机和队列的绑定
发送消息
消费消息.
路由模式:在路由模式的基础上增加路由Key.发布订阅模式是无条件将所有消息分发给所有消费者,路由模式是Exchange根据RoutingKey的规则,将数据筛选后发给对应的消费者队列.使用场景:需要根据特定规则分发消息的场景.
声明队列和声明交换机以及交换机和队列的绑定
发送消息
接收消息
通配符模式.
路由模式的升级版,在routingKey的基础上,增加了通配符的功能,Topic和Routing的基本原理相同,即:生产者将消息发给交换机,交换机根据routingKey将消息转发给与routingKey匹配的队列.不同之处是:routingKey的匹配方式不同,Routing模式是相等匹配,topics模式是通配符匹配.
声明队列和交换机以及队列和交换机的绑定.
发送消息
接收消息:
下面是一个简单的应用.一个物流系统,顾客在把订单发出之后,将订单消息暂存在RabbitMq,之后再转发到商家.
这里实现物流消息的发送与接收.为了方便演示,这里把订单系统和物流系统创建在一个项目中.发送的消息如下:这里发送了两条消息.建立物流系统,对订单消息进行消费:
可以看到队列中已经没有消息了.这里尝试发送一个对象,该对象有两个属性商品名和商品ID.