建设企业网站服务器,荆州做网站,网站注册器,邢台太行中学招生电话一、流程
首先先介绍一个简单的一个消息推送到接收的流程#xff0c;提供一个简单的图 黄色的圈圈就是我们的消息推送服务#xff0c;将消息推送到 中间方框里面也就是 rabbitMq的服务器#xff0c;然后经过服务器里面的交换机、队列等各种关系#xff08;后面会详细讲提供一个简单的图 黄色的圈圈就是我们的消息推送服务将消息推送到 中间方框里面也就是 rabbitMq的服务器然后经过服务器里面的交换机、队列等各种关系后面会详细讲将数据处理入列后最终右边的蓝色圈圈消费者获取对应监听的消息。
二、交换机类型
常用的交换机有以下三种因为消费者是从队列获取信息的队列是绑定交换机的所以对应的消息推送/接收模式也会有以下几种 1、Direct Exchange
直连型交换机根据消息携带的路由键将消息投递给对应队列。
大致流程有一个队列绑定到一个直连交换机上同时赋予一个路由键 routing key 。
然后当一个消息携带着路由值为abc这个消息通过生产者发送给交换机时交换机就会根据这个路由值abc去寻找绑定值的队列。
新建直流交换机 绑定信息 根据匹配条件routing Key(路由键)发送消息到队列 队列接收消息 2、Fanout Exchange
创建队列更改为广播类型 扇型广播交换机这个交换机没有路由键概念就算你绑了路由键也是无视的。 这个交换机在接收到消息后会直接转发到绑定到它上面的所有队列。
3、Topic Exchange
创建交换机类型改为主题交换机 主题交换机这个交换机其实跟直连交换机流程差不多但是它的特点就是在它的路由键和绑定键之间是有规则的。
简单地介绍下规则 * (星号) 用来表示一个单词 (必须出现的) # (井号) 用来表示任意数量零个或多个单词 // * 代表两点之间一个占位单词
// # 代表后面所有匹配所有
通配的绑定键是跟队列进行绑定的举个小例子
队列Q1 绑定键为 *.TT.* 队列Q2绑定键为 TT.#
如果一条消息携带的路由键为 A.TT.B那么队列Q1将会收到
如果一条消息携带的路由键为TT.AA.BB那么队列Q2将会收到
当一个队列的绑定键为 #井号 的时候这个队列将会无视消息的路由键接收所有的消息。
当 * (星号) 和 # (井号) 这两个特殊字符都未在绑定键中出现的时候此时主题交换机就拥有的直连交换机的行为。
如果只有 # 它就实现了扇形交换机的功能。
所以主题交换机也就实现了扇形交换机的功能和直连交换机的功能
三、交换机与队列特性设置
Exchange、Queue属性 durability durability默认是durable(持久化)durability 属性用于定义队列或者交换机是否是持久化的。 当一个队列或者交换机被声明为持久化的时候它们的元数据会被存储到磁盘上这样即使在 RabbitMQ 服务器重启后这些队列或者交换机的定义仍然存在。 持久化的队列和交换机可以确保消息的持久化即使 RabbitMQ 服务器重启或者崩溃消息也不会丢失。当消息被发送到持久化的队列或者交换机时它们会被写入磁盘以确保消息的持久性。 需要注意的是仅仅将队列或者交换机声明为持久化是不够的消息本身也必须被标记为持久化才能确保消息的持久性。这可以通过在消息的属性中设置 delivery_mode 为 2 来实现。 总之 durability 属性在 RabbitMQ 中用于确保队列和交换机的持久化以及消息的持久性从而提高消息传递的可靠性。 Exchange、Queue类型 delete 在 RabbitMQ 中 auto delete 属性用于定义队列或交换机是否在没有消费者或绑定时自动删除。 当一个队列或交换机被声明为 auto delete 属性为 true 时当没有消费者与该队列关联或者没有绑定到该交换机的队列时它们会自动被删除。 这个属性通常用于临时队列或者临时交换机的场景。临时队列或交换机是在没有消费者或者绑定时自动创建的用于处理一些临时性的任务或者临时的消息传递。 需要注意的是如果一个持久化的队列或交换机被声明为 auto delete 属性为 true那么它们在没有消费者或绑定时也会被自动删除但它们的定义会在 RabbitMQ 服务器重启后重新创建。 总之 auto delete 属性在 RabbitMQ 中用于定义队列或交换机是否在没有消费者或绑定时自动删除适用于临时队列或交换机的场景。 Exchange属性Internal Internal的意思是内部的意思在交换机这里设置为“Yes”之后表示当前Exchange是RabbitMQ内部使用用户所创建的Queue不会消费该类型交换机下的消息既然是为了RabbitMQ系统所用,作为用户我们就没有必要创建该类型的Exchange,当然默认也是选择No.