雷丰阳springboot之消息之rabbitmq简介
作者:互联网
消息服务的,两个常见的规范,一个是JMS,java 消息 服务。
还有一个就是AMQP,高级消息队列协议。
我们也会整合使用RabbitMQ来测试使用。
通过上面的场景,就是,解释了,我们为什么要使用,这些消息服务中间件。
消息服务有两个重要的概念,一个叫做消息代理,message broker,一个叫做目的地,就是destination。
消息代理,就是消息中间件的服务器。
消息发送者,是将消息发送到消息代理,消息代理,将消息发送到目的地。
目的地可以有两种形式,第一种是队列的形式,可以进行点对点通信。第二种形式是主题的形式,可以进行publish和subscribe,发布和订阅。
消息通信方式
这里面一定要注意,消息只有唯一的发送者和接受者,但是并不是说,只能够有一个接收者。
这句话,是要好好理解的。就是队列的形式的话,消息的接收者可以是B,C,D,但是消息一旦是被B拿走的话,其他人就只能够干瞪眼了。
两个常见的消息通信规范
在springboot当中对JMS和AMQP的支持
配置整合RabbitMQ
消息是由消息头和消息体组成的。
消息体是我们发出去的数据,它是不透明的。
消息头就是一堆属性组成的:routing-key、priority、delivery-mode。
Publisher是将message发给服务器的,也就是message broker的。
message发给message broker当中的Exchange的。
Exchange就好像现实生活当中的路由器,Exchange上面绑定了很多的队列,就好像路由器上面插了很多的网线一样的。
Exchange是通过routing-key来觉得消息到什么地方去的。
在RabbitMQ当中,Exchange是有四种类型:direct、fanout、topic和headers。
direct就是能够实现JMS当中的点对点消息模型的。
fanout,topic,headds可以实现JMS当中的发布订阅模型。
消息是通过交换器Exchange来决定发往哪个队列。
Queue是消息的容器。
队列里面的消息,一直等到有人连接队列,将消息取走,消息就不复存在了。
一个消息是如何抵达队列的呢?
- 首先是消息的生产者,Publisher,创建出来一个message。
- 这个message是发给了消息队列服务器的。首先抵达的是消息队列服务器的Exchange。这个叫做交换器。
- Exchange根据你发的消息message当中的routing-key路由键决定把消息派给某个队列Queue。
- 最终message是放在Queue中了。
- 这个Queue和Exchange之间的关联关系,就叫做绑定:Binding。交换器和消息队列之间的路由规则表。一个交换器,可以绑定多个队列,一个队列也可以绑定到多个交换器上。
- 如果我们每次去消息队列当中获取一个消息,我们都去建立一条TCP连接,那么这是非常耗费资源的。所以,我们和消息队列服务器一般是建立一条TCP链接,如果是想要获取数据,就开辟一个信道,这个信道就是Channel,就是我们真正用来发送数据、订阅队列、接收消息所使用的通道。这是一种为了节省资源的操作。
- Consumer:消费者
- Virtual Host:把我们整个的rabbitmq服务器,可以在内部划分出来很多的vhost,每一个vhost就是一个迷你版本的robbitmq的。它们都是可以独立运行的。vhost之间都是隔离的。每个vhost有自己的exchange、queue、路由规则、权限控制机制、身份认证、加密信息。所以,我们连接我们的rabbitmq的服务器的时候,必须指定我们的虚拟主机vhost是什么。vhost默认是
/
,是通过路径来进行划分的。 - Broker:我们也称之为message Broker,翻译过来就叫做消息代理,所谓的消息代理,指的就是我们的消息队列服务器实体。
RabbitMQ的运行机制
AMQP当中的消息路由机制和JMS当中,还是有一些差别的。
AMQP当中增加了Exchange和Binding等角色。
Exchange类型
Exchange类型一共是有四种:direct、fanout、topic、headers。
这个headers,我们就不说了,这个用得是非常少的。
这个不是用路由键来判断的,而是用AMQP协议的消息头。
第一种叫做direct exchange。
它的作用就是我们routing-key和binding-key一模一样的时候,我们就会发送给对应队列。
这个就是典型的点对点通信模型。
Fanout Exchange,这个就比较简单了。
这个交换器下面绑定了3-5个消息队列,比如说,是这个样子的。
不管你发过来的消息,绑定的路由键,是什么玩意。
Fanout Exchange就会把这个消息,给下面绑定的queue每个人,都发一份的。
就是这么霸气的哦。
这个就是,我们说的广播模式。
这个发送消息的速度是最快的。
这也是我们实现JMS当中发布/订阅模式的参考实现。
第三个就是topic exchange。
这个就比较复杂了。
这个允许我们的交换器对路由键,进行一些模糊匹配。
然后呢,有选择性地把消息挑选出来,发给某一个队列的哦。
标签:交换器,springboot,Exchange,队列,rabbitmq,雷丰阳,消息,当中,message 来源: https://www.cnblogs.com/gnuzsx/p/14731115.html