RabbitMQ的持久化(六)

RabbitMQ的持久化主要体现在三个方面,即交换机持久化,队列持久化及消息持久化

注意,因公司使用php-amqplib来实现RabbitMQ,故之后举例说明的代码均使用的php-amqplib,而非php的amqp扩展

1、交换机持久化

交换机的持久化其实就是相当于将交换机的属性在服务器内部保存,当MQ的服务器发生意外或关闭之后,重启RabbitMQ时不需要重新手动或执行代码去建立交换机,交换机会自动建立,相当于一直存在。

创建交换机的方法为exchange_declare($exhcange_name,$type,$passive,$durable,$auto_delete);,当$durable这个参数为true时,该交换机就会被存储到内存里,当RabbitMQ服务器重启时,会将该交换机自动重新创建,如果为false,重启后该交换机则会被从交换机队列里删掉。

2、队列持久化

队列持久化类似于交换机持久化,创建队列方法queue_declare中也有一个参数是$durable,也代表着RabbitMQ服务器重启时,是否自动创建队列,图中参数注释与方法中的参数(除队列名外)顺序一一对应

3、消息持久化

众所周知,RabbitMQ的消息是依附于队列存在的,所以想要消息持久化,那么前提是队列也要持久化

消息的持久化与交换机持久化与队列持久化有所不同,消息的持久化在于创建消息的时候,加一个持久化消息的属性,创建消息的方法是new AMQPMessage($data,$properties),其中$properties是个数组,里面可以设置对消息的各种属性,如持久化,优先级等属性。持久化的key值为"delivery_mode",当"delivery_mode"为1时表示消息不持久化,为2时则表示消息持久化,且把消息存在磁盘里

原文地址:https://www.cnblogs.com/php-linux/p/11293901.html

时间: 2024-08-30 18:32:11

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

数据持久化(六)之Using CoreData with MagicalRecord

第五节里面,我介绍了CoreData的配置和基本的增删改查,可能很多人会觉得用它真繁琐.这里,我再介绍网上大神对它进行了人性化封装的第三方MagicalRecord,正如FMDB对sqlite进行了封装一样,MagicalRecord让你觉得用CoreData很方便. @基本配置: 1.下载MagicalRecord,将里面的MagicalRecord文件夹拖入你的工程 2.确定你创建的工程没有勾选"Use Core Data" 3.导入CoreData.frame框架 4.在.pch

Rabbitmq消息持久化

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

RabbitMQ入门教程(六):路由选择Routing

原文:RabbitMQ入门教程(六):路由选择Routing 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/78629168 分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 简介 本节主要演示使用直连接类型,将多个路由键绑定到同一个队列上.也可以将同一个键绑定到多个队列上(多重绑定multiple bind

RabbitMQ系列 第六篇:Topic类型的exchange

在上篇博文中,我们对之前的日志系统做了稍许的完善.没有使用fanout类型的exchange来广播,而是使用了direct类型的exchange来选择性的接收日志消息. 尽管使用了direct类型的exchange对日志系统有所提升,但还是有一些限制(消息不能够基于多重因素来路由). 在我们的日志系统中,希望不仅仅能够根据日志级别来订阅,还可以根据指定的routing key来订阅.你应该可以理解的,就如unix的系统日志工具,日志消息路由规则不仅仅基于日志级别(info/warn/crit…)

RabbitMQ学习(六).NET Client之RPC

Remote procedure call (RPC) (using the .NET client) 在第二个教程second tutorial 中我们已经了解到了工作队列如何将耗时任务分配给多个workers. 但是假如我们需要在远端机器上面运行一个函数并且等待结果返回呢?这通常叫做RPC,即远端过程调用. 这里我们将用RabbitMQ构造一个RPC系统,客户端请求调用服务端的计算斐波纳契数列值得一个函数,并等待计算结果. Client interface(客户端调用接口) 首先看一下客户端

rabbitMQ学习笔记(六) topic类型消息。

上一节中使用了消息路由,消费者可以选择性的接收消息. 但是这样还是不够灵活. 比如某个消费者要订阅娱乐新闻消息 . 包括新浪.网易.腾讯的娱乐新闻.那么消费者就需要绑定三次,分别绑定这三个网站的消息类型. 如果新闻门户更多了,那么消费者将要绑定个更多的消息类型, 其实消费者只是需要订阅娱乐新闻,不管是哪个网站的新闻,都需要. 那么在rabbitMQ中可以使用topic类型. 模糊匹配消息类型. 模糊匹配中的 *代表一个  #代表零个或1个 示例: 1 package com.zf.rabbitm

RabbitMQ学习(六):远程结果调用

场景:我们需要在传输消息时得到结果 客服端在发送请求时会发送回调队列,服务端处理事情完成后会将结果返回到回调队列中,在增加关联标志关联每个请求和服务返回 客户端代码: public class RPCClient { private final static String RPC_Queue_Name = "rpc_queue"; public static void main(String[] args) throws IOException, TimeoutException, I

RabbitMQ入门(六) —— 持久化

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