RabbitMQ Tutorials

合集下载

rabbitmq+学习手册

rabbitmq+学习手册

Redhat、iMatix 等联合制定了 AMQP 的公开标准。 Introduction: RabbitMQ is a complete and highly reliable enterprise messaging system based on the emerging AMQP
standard. It is licensed under the open source Mozilla Public License and has a platform-neutral distribution, plus platform-specific packages and bundles for easy installation.
rabbitmq 学习-1-AMQP介绍
本文档来自网上.[ 看否网正使用rabbitmq做爬虫队列,欢迎大家交流q
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准, 为面向消息的中间件设计。
若下载的是rabbitmq-server-generic-unix-1.7.2.tar.gz,可以直接解压,像windows上一样启动,然后使用 即可
rabbitmq 学习-3-初试1
本例是一个简单的异步发送消息实例 1,发送端 @Test(groups = { "sunjun" }) public class RabbitmqTest {
rabbitmq 学习-2-安装
Windows 1,下载 下载erlang: 下载rabbitmq:/download.html 2,安装 先安装erlang,C:\Program Files\erl5.7.5 设置环境变量:ERLANG_HOME=C:\Program Files\erl5.7.5 解压rabbitmq,进入dos下, >cd C:\rabbitmq_server-1.7.2\sbin >rabbitmq-service install 3,启动 >cd C:\rabbitmq_server-1.7.2\sbin >rabbitmq-service start 或都直接双击C:\rabbitmq_server-1.7.2\sbin\rabbitmq-service.bat Linux 1,下载erlang for linux版本,安装

RabbitMQ入门教程(PHP版)使用rabbitmq-delayed-message-。。。

RabbitMQ入门教程(PHP版)使用rabbitmq-delayed-message-。。。

RabbitMQ⼊门教程(PHP版)使⽤rabbitmq-delayed-message-。

延迟任务应⽤场景场景⼀:物联⽹系统经常会遇到向终端下发命令,如果命令⼀段时间没有应答,就需要设置成超时。

场景⼆:订单下单之后30分钟后,如果⽤户没有付钱,则系统⾃动取消订单。

场景三:过1分钟给新注册会员的⽤户,发送注册邮件等。

php 使⽤rabbitmq-delayed-message-exchange插件实现延迟功能1.安装下载后解压,并将其拷贝⾄(使⽤Linux Debian/RPM部署)rabbitmq服务器⽬录:/usr/local/rabbitmq/plugins中( windows安装⽬录\rabbitmq_server-version\plugins ).2.启⽤插件使⽤命令rabbitmq-plugins enable rabbitmq_delayed_message_exchang启⽤插件rabbitmq-plugins enable rabbitmq_delayed_message_exchang输出如下:The following plugins have been enabled:rabbitmq_delayed_message_exchange通过rabbitmq-plugins list查看已安装列表,如下:...[ ] rabbitmq_delayed_message_exchange 20171215-3.6.x...3.机制解释安装插件后会⽣成新的Exchange类型x-delayed-message,该类型消息⽀持延迟投递机制,接收到消息后并未⽴即将消息投递⾄⽬标队列中,⽽是存储在mnesia(⼀个分布式数据系统)表中,检测消息延迟时间,如达到可投递时间时并将其通过x-delayed-type类型标记的交换机类型投递⾄⽬标队列。

4.php实现过程消费者 delay_consumer2.php:<?php//header('Content-Type:text/html;charset=utf8;');$params = array('exchangeName' => 'delayed_exchange_test','queueName' => 'delayed_queue_test','routeKey' => 'delayed_route_test',);$connectConfig = array('host' => 'localhost','port' => 5672,'login' => 'guest','password' => 'guest','vhost' => '/');//var_dump(extension_loaded('amqp'));//exit();try {$conn = new AMQPConnection($connectConfig);$conn->connect();if (!$conn->isConnected()) {//die('Conexiune esuata');//TODO 记录⽇志echo 'rabbit-mq 连接错误:', json_encode($connectConfig);exit();}$channel = new AMQPChannel($conn);if (!$channel->isConnected()) {// die('Connection through channel failed');//TODO 记录⽇志echo 'rabbit-mq Connection through channel failed:', json_encode($connectConfig);exit();}$exchange = new AMQPExchange($channel);//$exchange->setFlags(AMQP_DURABLE);//声明⼀个已存在的交换器的,如果不存在将抛出异常,这个⼀般⽤在consume端$exchange->setName($params['exchangeName']);$exchange->setType('x-delayed-message'); //x-delayed-message类型/*RabbitMQ常⽤的Exchange Type有三种:fanout、direct、topic。

rabbitmq 使用手册

rabbitmq 使用手册

rabbitmq 使用手册RabbitMQ 是一个开源的消息代理软件,它实现了高效的消息传递机制,可以在分布式系统中进行消息的发布和订阅。

下面是 RabbitMQ 的使用手册的详细精确说明:1. 安装 RabbitMQ:首先,你需要下载并安装 RabbitMQ。

你可以从RabbitMQ 官方网站上下载适合你操作系统的安装包,并按照官方文档中的说明进行安装。

2. 启动 RabbitMQ 服务器:安装完成后,你可以启动 RabbitMQ 服务器。

在大多数操作系统中,你可以通过命令行执行以下命令来启动RabbitMQ:```rabbitmq-server```如果一切正常,你将会看到 RabbitMQ 服务器成功启动的日志信息。

3. 创建和管理队列:RabbitMQ 使用队列来存储消息。

你可以使用 RabbitMQ 的管理界面或者命令行工具来创建和管理队列。

以下是一些常用的队列操作命令:- 创建队列:```rabbitmqadmin declare queue name=<queue_name>```- 查看队列列表:```rabbitmqadmin list queues```- 删除队列:```rabbitmqadmin delete queue name=<queue_name>```4. 发布和消费消息:使用 RabbitMQ,你可以将消息发布到队列中,并从队列中消费消息。

以下是一些常用的消息操作命令:- 发布消息:```rabbitmqadmin publish routing_key=<routing_key>payload=<message>```- 消费消息:```rabbitmqadmin get queue=<queue_name>```- 确认消息已被消费:```rabbitmqadmin ack delivery_tag=<delivery_tag> ```5. 设置消息交换机和绑定:RabbitMQ 使用消息交换机来将消息路由到队列。

RabbitMQ-最完整最全教程

RabbitMQ-最完整最全教程

RabbitMQ-Day1学习目标1. 消息队列介绍2. 安装RabbitMQ3. 编写RabbitMQ的入门程序4. RabbitMQ的5种模式讲解5. SpringBoot整合RabbitMQ1消息队列概述1.1消息队列MQMQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。

为什么使用MQ?在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。

开发中消息队列通常有如下应用场景:1.2AMQP 和JMSMQ是消息通信的模型;实现MQ的大致有两种主流方式:AMQP、JMS。

1.2.1AMQPAMQP高级消息队列协议,是一个进程间传递异步消息的网络协议,更准确的说是一种binary wire-level protocol(链接协议)。

这是其和JMS的本质差别,AMQP不从API层进行限定,而是直接定义网络交换的数据格式。

1.2.2JMSJMS即Java消息服务(JavaMessage Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

1.2.3AMQP 与JMS 区别JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。

JMS规定了两种消息模式;而AMQP的消息模式更加丰富1.3消息队列产品目前市面上成熟主流的MQ有Kafka 、RocketMQ、RabbitMQ,我们这里对每款MQ做一个简单介绍。

1.4RabbitMQ介绍RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。

RabbitMQ入门到精通_余胜军版笔记

RabbitMQ入门到精通_余胜军版笔记

RabbitMQ⼊门到精通_余胜军版笔记原视频链接:MQ架构设计原理什么是消息中间件消息中间件基于队列模型实现异步/同步传输数据作⽤:可以实现⽀撑⾼并发、异步解耦、流量削峰、降低耦合度。

在了解中间件之前,我们先了解⼀下什么是同步?⾸先我们想⼀下,两个公司之间如果有互相调⽤接⼝的业务需求,如果没有引⼊中间件技术,是怎么实现的呢?⽤户发起请求给系统A,系统A接到请求直接调⽤系统B,系统B返回结果后,系统A才能返回结果给⽤户,这种模式就是同步调⽤。

所谓同步调⽤就是各个系统之间互相依赖,⼀个系统发送请求,其他系统也会跟着依次进⾏处理,只有所有系统处理完成后对于⽤户来讲才算完成了⼀次请求。

只要其他系统出现故障,就会报错给⽤户。

那么引⼊中间件后,是如何做到异步调⽤的呢?⽤户发起请求给系统A,此时系统A发送消息给MQ,然后就返回结果给⽤户,不去管系统B了。

然后系统B根据⾃⼰的情况,去MQ中获取消息,获取到消息的时候可能已经过了1分钟甚⾄1⼩时,再根据消息的指⽰执⾏相应的操作。

那么想⼀想,系统A和系统B互相之间是否有通信?这种调⽤⽅式是同步调⽤吗?系统A发送消息给中间件后,⾃⼰的⼯作已经完成了,不⽤再去管系统B什么时候完成操作。

⽽系统B拉去消息后,执⾏⾃⼰的操作也不⽤告诉系统A执⾏结果,所以整个的通信过程是异步调⽤的。

说到这⾥,我们可以做个总结,消息中间件到底是什么呢?其实消息中间件就是⼀个独⽴部署的系统。

可以实现各个系统之间的异步调⽤。

当然它的作⽤可不⽌这些,通过它可以解决⼤量的技术痛点,我们接下来会进⾏介绍。

消息中间件,总结起来作⽤有三个:异步化提升性能、降低耦合度、流量削峰。

异步化提升性能先来说说异步化提升性能,上边我们介绍中间件的时候已经解释了引⼊中间件后,是如何实现异步化的,但没有解释具体性能是怎么提升的,我们来看⼀下下边的图。

没有引⼊中间件的时候,⽤户发起请求到系统A,系统A耗时20ms,接下来系统A调⽤系统B,系统B耗时200ms,带给⽤户的体验就是,⼀个操作全部结束⼀共耗时220ms。

RabbitMQ官方教程一HelloWorld(GOLANG语言实现)

RabbitMQ官方教程一HelloWorld(GOLANG语言实现)

RabbitMQ官⽅教程⼀HelloWorld(GOLANG语⾔实现)介绍RabbitMQ是消息中间件:它接受并转发消息。

您可以将其视为邮局系统:将要发送的邮件放在邮箱中时,可以确保邮递员最终将邮件传递给收件⼈。

以此类推,RabbitMQ是⼀个邮箱,⼀个邮局和⼀个邮递员。

RabbitMQ与邮局之间的主要区别在于,它不处理纸张,⽽是接收,存储和转发数据消息的⼆进制数据。

以下是RabbitMQ和消息发送的术语Producer:⽣产者。

负责⽣产消息。

Queue:队列。

负责存储消息。

队列在RabbitMQ中充当邮箱的⾓⾊,消息传递到RabbitMQ中,只能存储在队列中。

队列受主机内存和磁盘⼤⼩的约束。

本质是⼀个很⼤的消息缓冲区。

许多⽣产者可以将消息发送到⼀个队列,许多消费者可以尝试从⼀个队列接收数据。

Consumer:消费者。

负责处理消息。

** 笔者补充Connect:连接。

⽣产者和RabbitMQ服务之间建⽴的TCP连接。

Channel:信道,⼀条连接可包含多条信道,不同信道之间通信互不⼲扰。

考虑下多线程应⽤场景,每个线程对应⼀条信道,⽽不是对应⼀条连接,这样可以提⾼性能。

body:消息主体,要传递的数据。

exchange:交换器,负责把消息转发到对应的队列。

交换器本⾝没有缓存消息的功能,消息是在队列中缓存的,如果队列不存在,则交换器会直接丢弃消息。

常⽤的有四种类型的交换器:direct、fanout、topic、headers。

不同类型的交换器有不同的交换规则,交换器会根据交换规则把消息转发到对应的队列。

exchangeName:交换器名称,每个交换器对应⼀个名称,发送消息时会附带交换器名称,根据交换器名称选择对应的交换器。

BandingKey:绑定键,⼀个队列可以有⼀个到多个绑定键,通过绑定操作可以绑定交换器和队列,交换器会根据绑定键的名称找到对应的队列。

RotingKey:路由键,发送消息时,需要附带⼀条路由键,交换器会对路由键和绑定键进⾏匹配,如果匹配成功,则消息会转发到绑定键对应的队列中。

rabbitmq使用手册

rabbitmq使用手册

rabbitmq使用手册RabbitMQ是一种开源的消息队列中间件,采用AMQP协议,被广泛应用于构建可靠、高效的分布式系统。

本手册将详细介绍RabbitMQ 的安装、配置、使用和常见问题解决方案,帮助读者快速上手使用RabbitMQ。

第一章安装与配置1.1 环境准备在开始安装RabbitMQ之前,需要确保系统满足以下要求:操作系统(例如Linux、Windows)、Erlang运行时环境以及RabbitMQ软件包。

1.2 安装RabbitMQ按照文档提供的方式,在所选的操作系统上安装RabbitMQ。

安装过程中需注意版本兼容性和安全配置。

1.3 配置RabbitMQ在安装完成后,需要对RabbitMQ进行适当的配置。

主要包括网络配置、认证与授权、虚拟主机、交换机和队列的创建等。

第二章消息发布与订阅2.1 消息生产者通过使用RabbitMQ的API,开发者可以编写生产者代码将消息发布到RabbitMQ的交换机上。

这里需要注意消息的序列化和指定交换机名称。

2.2 消息消费者RabbitMQ的消费者通过订阅交换机的队列来接收消息,可以使用RabbitMQ的API编写消费者代码,并实现消息的处理逻辑。

2.3 消息确认机制RabbitMQ提供了消息的确认机制,确保消息在传输过程中的可靠性。

开发者可以选择隐式确认或显式确认来保证消息的消费状态。

第三章消息路由与过滤3.1 路由模式RabbitMQ支持多种路由模式,如直接路由、主题路由和广播路由。

开发者可以根据实际需求选择最适合的路由模式。

3.2 消息过滤通过使用RabbitMQ的消息过滤功能,可以根据消息的属性进行过滤,只有满足条件的消息才会被消费者接收。

第四章高级特性与扩展4.1 持久化使用RabbitMQ的持久化机制,可以确保消息在服务器重启后依然存在,防止消息丢失。

4.2 集群与高可用通过搭建RabbitMQ集群,可以提高系统的可用性和扩展性。

在集群中,消息将自动在节点之间进行复制。

RabbitMQ安装配置步骤详解

RabbitMQ安装配置步骤详解

R a b b i t M Q安装配置步骤详解Revised by Petrel at 2021R a b b i t M Q安装配置步骤详解1.下载RabbitMQ下载RabbitMQ安装包,下载地址:使用mkdir命令在usr下新建rabbitmq目录,如:mkdir/usr/rabbitmq 用SSH工具将下载的上传到Linux系统中的/usr/rabbitmq/目录。

2.安装RabbitMQ由于Rabbitmq是用erlang语言写的,所以我们需要安装Erlang,安装erlang又需要安装python与simplejson,所以我们从python开始:2.1安装预环境a)查看gccgcc-c++、zlibzlin-devel是否安装,执行如下命令:rpm-qa|grepgccrpm-qa|grepzlib如果未安装需要执行一下命令:yuminstallgccgcc-c++yuminstallzlibzlin-develb)查看是否安装Pythonrpm-qa|grep Python下载并解压:tar-zxvfcdPython-2.7.6配置安装目录,命令如下./configure--prefix=/usr/local/python27编译&&安装,命令如下:make&&makeinstallc)Erlang安装安装如下makegccgcc-c++kernel-develm4ncurses-developenssl-devel依赖包,命令:yum-yinstallmakegccgcc-c++kernel-develm4ncurses-developenssl-develtar-xvf配置安装:使用cd命令到Erlang的解压目录,如:cdotp_src_R16B02配置安装路径,命令如下:./configure--prefix=/usr/local/erlang--with-ssl-enable-threads-enable-smmp-support-enable-kernel-poll--enable-hipe--without-javac//不用java编译,故去掉java避免错误编译安装,命令如下make&&makeinstall配置环境变量,vi/etc/profile,添加如下内容:ERLANG_HOME=/usr/local/erlangPATH=$ERLANG_HOME/bin:$PATHexportERLANG_HOMEexportPATH按ESC退出编辑,使用:wq命令保存退出,不保存退出::q或者:q!使用source命令使环境变量立即生效,如:source/etc/profile测试是否安装成功:安装完成以后,执行erl看是否能打开eshell,用’halt().’退出,注意后面的点号,那是erlang的结束符。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(5) 因为交换器是命名实体,声明一个已经存在的交换器,但是试图赋予不同类型是会导致错 误。客户端需要删除这个已经存在的交换器,然后重新声明并且赋予新的类型。
(6) 交换器的属性: - 持久性:如果启用,交换器将会在server重启前都有效。 - 自动删除:如果启用,那么交换器将会在其绑定的队列都被删除掉之后自动删除掉自身。 - 惰性:如果没有声明交换器,那么在执行到使用的时候会导致异常,并不会主动声明。
基本示意图
虚拟主机(virtual host)
一个虚拟主机持有一组交换机、队列和绑定。为什么需要多个虚拟主机呢?很简单,
RabbitMQ当中,用户只能在虚拟主机的粒度进行权限控制。因此,如果需要禁止A组访问B组 的交换机/队列/绑定,必须为A和B分别创 建一个虚拟主机。每一个RabbitMQ服务器都有一个 默认的虚拟主机“/”。
选择RabbitMQ一个重要原因就是消息的持久化。
RabbitMQ简介
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议, 是应用层协议的一个开放标准,为面向消息的中间件设计。
消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者 的存在,反之亦然。
Producer 要产生消息必须要创建一个 Exchange ,Exchange 用于转发消息,但是它不会 做存储,如果没有 Queue bind 到 Exchange 的话,它会直接丢弃掉 Producer 发送过来的消 息,当然如果消息总是发送过去就被直接丢弃那就没有什么意思了,一个 Consumer 想要接受 消息的话,就要创建一个 Queue ,并把这个 Queue bind 到指定的 Exchange 上,然后 Exchange 会把消息转发到 Queue 那里,Queue 会负责存储消息,Consumer 可以通过主动 P从 Queue 中取得消息。
消息传递
(1) 消息在队列中保存,以轮询的方式将消息发送给监听消息队列的消费者,可以动态的增加 消费者以提高消息的处理能力。
(2) 为了实现负载均衡,可以在消费者端通知RabbitMQ,一个消息处理完之后才会接受下一个 消息。
channel.basic_qos(prefetch_count=1) 注意:要防止如果所有的消费者都在处理中,则队列中的消息会累积的情况。
(3) 队列的属性: - 持久性:如果启用,队列将会在server重启前都有效。 - 自动删除:如果启用,那么队列将会在所有的消费者停止使用之后自动删除掉自身。 - 惰性:如果没有声明队列,那么在执行到使用的时候会导致异常,并不会主动声明。 - 排他性:如果启用,队列只能被声明它的消费者使用。 这些性质可以用来创建例如排他和自删除的transient或者私有队列。这种队列将会在所有链接 到它的客户端断开连接之后被自动删除掉。它们只是短暂地连接到server,但是可以用于实现 例如RPC或者在AMQ上的对等通信。(关于rpc没进行研究,后面说明原因)
关于RPC
A note on RPC Although RPC is a pretty common pattern in computing, it's often criticised. The problems arise when a programmer is not aware whether a function call is local or if it's a slow RPC. Confusions like that result in an unpredictable system and adds unnecessary complexity to debugging. Instead of simplifying software, misused RPC can result in unmaintainable spaghetti code.
简单来说就是使用RPC增加了不确定,以及增加调试的复杂度。官网的思想是简化你的软件, 滥用RPC可能会造成很多错误。所以没去研究rpc。 研究rpc可以去官网看看例子,反正我是没看 /tutorials/tutorial-six-python.html
Message acknowledgment:
当“Consumer”接受到一个消息并作长时间处理时,有可能发生意外状况,如运行 “Consumer”的机器突然关闭,这时这个消息所要执行的任务可能没有得到正确处理。
RabittMQ Tutorials
占涛
引言
你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你 是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎? 如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。
消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯) 问题,你也可以把它用于系统间服务的相互调用(RPC)。 本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一。
(3) 消息有14个属性,最常用的几种: deliveryMode:持久化属性 contentType:编码 replyTo:指定一个回调队列 correlationId:消息id (4) 消息生产者可以选择是否在消息被发送到交换器并且还未投递到队列(没有绑定器存在) 和/或没有消费者能够立即处理的时候得到通知。通过设置消息的mandatory和/或immediate属 性为真,这些投递保障机制的能力得到了强化。
集群(cluster):
(1) 不支持跨网段(如需支持,需要shovel或federation插件) (2) 可以随意的动态增加或减少、启动或停止节点,允许节点故障 (3) 集群分为RAM节点和DISK节点,一个集群最好至少有一个DISK节点保存集群的状态。 (4) 集群的配置可以通过命令行,也可以通过配置文件,命令行优先。
交换机(Exchang)
(1) 接收消息,转发消息到绑定的队列。四种类型:direct, topic, headers and fanout direct:转发消息到routigKey指定的队列 topic:按规则转发消息(最灵活) headers:(较为少用) fanout:转发消息到所有绑定队列 (2) 如果没有队列绑定在交换机上,则发送到该交换机上的消息会丢失。交换机不做消息存储。 (3) 一个交换机可以绑定多个队列,一个队列可以被多个交换机绑定。 (4) topic类型交换器通过模式匹配分析消息的routing-key属性。它将routing-key和binding-key 的字符串切分成单词。这些单词之间用点隔开。它同样也会识别两个通配符:#匹配0个或者多 个单词,*匹配一个单词。例如,binding key:*.stock.#匹配routing key:usd.stcok和 eur.stock.db,但是不匹配stock.nana。 还有一些其他的交换器类型,如header、failover、system等,现在在当前的RabbitMQ版本中 均未实现。
(5) 此外,一个生产者可以设置消息的persistent属性为真。这样一来,server将会尝试将这些 消息存储在一个稳定的位置,直到server崩溃。当然,这些消息肯定不会被投递到非持久的队 列中。
高可用性(HA)
(1) 消息ACK,通知RabbitMQ消息已被处理,可以从内存删除。如果消费者因宕机或链接失败 等原因没有发送ACK(不同于ActiveMQ,在RabbitMQ里,消息没有过期的概念),则 RabbitMQ会将消息重新发送给其他监听在队列的下一个消费者。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、 可靠性、安全。
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持 多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、 ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发 消息,在易用性、扩展性、高可用性等方面表现不俗。 下面将重点介绍RabbitMQ中的一些基础概念,了解了这些概念,是使用好 RabbitMQ的基础。
channel.basicPublish(exchangeName, routingKey,
MessageProperties.PERSISTENT_TEXT_PLAIN,
message.getBytes()); 这样,即使RabbitMQ服务器重启,也不会丢失队列和消息。
(3) publisher confirms (4) master/slave机制,配合Mirrored Queue,这种情况下,publisher会正常发送消息和接收消 息的confirm,但对于subscriber来说,需要接收Consumer Cancellation Notifications来得到主 节点失败的通知,然后re-consume from the queue,此时要求client有处理重复消息的能力。 注意:如果queue在一个新加入的节点上增加了一个slave,此时slave上没有此前queue的信息 (目前还没有同步机制)。 (通过命令行或管理插件可以查看哪个slave是同步的: rabbitmqctl list_queues name slave_pids synchronised_slave_pids) 当一个slave重新加入mirrored-queue时,如果queue是durable的,则会被清空。
队列(Queues)
是你的消息(messages)的终点,可以理解成装消息的容器。消息就一直在里面,直到 有客户端(也就是消费者,Consumer)连接到这个队列并且将其取走为止。
需要记住的是,队列是由消费者(Consumer)通过程序建立的,不是通过配置文件或者 命令行工具。这没什么问题,如果一个消费者试图创建一个已经存在的队列,RabbitMQ会忽 略这个请求。因此你可以将消息队列的配置写在应用程序的代码里面。这个概念不错。
相关文档
最新文档