RabbitMQ 交换器、持久化

一、 交换器

  RabbitMQ交换器(Exchange)分为四种

  1.   direct    
  2.   fanout
  3.   topic
  4.   headers
  • direct

   默认的交换器类型,由路由键匹配,消息就投递到相应的队列

  • fanout

  一种发布/订阅模式的交换器,发布一条消息时,fanout把消息广播到附加到fanout交换器的队列上

  • topic

  topic类似于fanout交换器,但更加具体化,用routingKey进行规则匹配,更灵活的匹配出用户想要接收的消息

  routingKey形如:com.company.module.demo,具体匹配规则:

    "*"与"#"可以匹配任意字符,区别是"*"只能匹配由"."分割的一段字符,而"#"可以匹配所有字符   

  发布一条"com.abc.test.push"的消息,能匹配的routingKey:

com.abc.test.*
#.test.push
#

  不能匹配的:

com.abc.*
*.test.push
*

二、持久化

  RabbitMQ默认情况下重启消息服务器时,会丢失消息,为了尽量保证消息在服务器宕机时不丢失,就需要把消息持久化,但是也只是尽量不丢失,由于涉及磁盘写入,当消息量巨大时,mq性能也会被严重拉低。

整理不易,打赏一分也是鼓励,谢谢!

  微信      支付宝

原文地址:https://www.cnblogs.com/castielangel/p/9952069.html

时间: 2024-08-30 18:13:41

RabbitMQ 交换器、持久化的相关文章

rabbitmq 消息持久化

rabbitmq 消息持久化 2016-02-18 11:19 224人阅读 评论(0) 收藏 举报  分类: 综合(15)  版权声明:本文为博主原创文章,未经博主允许不得转载. 二: 任务分发 &消息持久化 启用多个接收端的时候如果某一个receive 关闭要保证消息有反馈是否收到 send端 #-*- coding: UTF-8 -*-import pikacred = pika.PlainCredentials('zxl','pwd') #账号密码params = pika.Connec

Rabbitmq消息持久化

消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证消息可靠性的呢--消息持久化.?为了保证RabbitMQ在退出或者crash等异常情况下数据没有丢失,需要将queue,exchange和Message都持久化. queue的持久化 queue的持久化是通过durable=true来实现的.?一般程序中这么使用: /** * amqp_queue_declare * * @param [in] state connection state – TCP连接 * @param

RabbitMQ的持久化(六)

RabbitMQ的持久化主要体现在三个方面,即交换机持久化,队列持久化及消息持久化 注意,因公司使用php-amqplib来实现RabbitMQ,故之后举例说明的代码均使用的php-amqplib,而非php的amqp扩展 1.交换机持久化 交换机的持久化其实就是相当于将交换机的属性在服务器内部保存,当MQ的服务器发生意外或关闭之后,重启RabbitMQ时不需要重新手动或执行代码去建立交换机,交换机会自动建立,相当于一直存在. 创建交换机的方法为exchange_declare($exhcang

RabbitMQ | 交换器类型

exchange常见类型有3种,分别如下 “fanout” 将发送到该交换器的消息路由到所有与该交换器绑定的队列中. ”direct“ 将发送到该交换器的消息路由到那些BindingKey和RoutingKey完全匹配的队列中 “topic” 与“direct”类型交换器相似,将消息路由到BindingKey和RoutingKey相匹配的队列中,但在匹配规则上有不同 RountingKey 和BindingKey 为一个点号“.”分隔的字符串,被分隔的字符串可称为单词,例如:log.warnin

php amqp 消息队列 RabbitMQ 交换器类型 直连 (三)

1.AMQP_EX_TYPE_DIRECT:直连型 直连型又包括: 1对1 和1对N(N对1. N对N) 接收端receive.php代码如下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <!--?php $connect =newAMQPConnection(); $connect--->connect(); $channel =newAMQPChannel($connect); $

RabbitMQ入门(六) —— 持久化

在默认情况下,一旦RabbitMQ重启的话,我们定义的exchange和queue都会消失,在queue里面的消息也自然消失的无影无踪.这样肯定是不合理的,毕竟谁都无法保证RabbitMQ服务器永远不用重启,也永远不会出故障.那么怎么保证在RabbitMQ服务器重启后消息不会丢失呢?这里我们就要用到RabbitMQ的持久化. 要完成消息的持久化需要三个步骤: 把exchange的durable属性设成true 把queue的durable属性设成true 把消息的deliveryMode设成2

RabbitMQ原理与相关操作(三)消息持久化

现在聊一下RabbitMQ消息持久化: 问题及方案描述 1.当有多个消费者同时收取消息,且每个消费者在接收消息的同时,还要处理其它的事情,且会消耗很长的时间.在此过程中可能会出现一些意外,比如消息接收到一半的时候,一个消费者死掉了. 这种情况要使用消息接收确认机制,可以执行上次宕机的消费者没有完成的事情. 2.在默认情况下,我们程序创建的消息队列以及存放在队列里面的消息,都是非持久化的.当RabbitMQ死掉了或者重启了,上次创建的队列.消息都不会保存. 这种情况可以使用RabbitMQ提供的消

rabbitmq在kubernetes中持久化集群部署

背景 Javashop电商系统的消息总线使用的事rabbitmq,在订单创建.静态页生成.索引生成等等业务中大量采用异步消息系统,这个对于mq高可用的要求有两个重要的考量: 1.集群化 2.可扩容 3.冗灾 冗灾就要实现rabbitmq的持久化,要考虑到rabbitmq宕机的情况,当rabbitmq因不可抗因素挂掉了,这时有一些消息还没来得及被消费,当我们再恢复了rabbitmq的运行后,这些消息应该同时被恢复,可以再次被消费. 本文着重讨论rabbitmq的k8s的持久化部署方案,当然提供在方

你不知道的RabbitMQ集群架构全解

RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchange介绍与实践 RabbitMQ事务和Confirm发送方消息确认--深入解读 使用Docker部署RabbitMQ集群 你不知道的RabbitMQ集群架构全解 前言 本文将系统的介绍一下RabbitMQ集群架构的特点.异常处理.搭建和使用中要注意的一些细节. 知识点 一.为什么使用集群? 二.集群的特点 三.集群异常处理 四.集群节点类型 五.集群