❶ rabbitmq基础配置中文说明文档
本文为官方文档翻译版本 rabbitmq3.7.5版本,原地址: https://github.com/rabbitmq/rabbitmq-server/blob/master/docs/rabbitmq.conf.example 。以#开头的行为配置,key和等号以及value之间尽量保持有一个空格。以下的"默认"指的为在没有添加配置文件或者该key没有配置。 rabbitmq是使用基于tcp的amqp协议通信(如果需要ssl,可参考 这里 ),所以这里都是监听的tcp的端口。rabbitmq支持监听多端口,并支持指定网卡的ipv4和ipv6。格式为listeners.tcp.${name} = ${value},name可以是任意不重复的值,如:defaul、local、local_v6等。value的格式有: (1)包括了(2)和(3),(2)包括了(4)和(6),(3)包括了(5)和(7)。下面对应的为其中情况的配置,按需求进行配置,不需要都配,大部分情况只配置(1)。默认的配置为listeners.tcp.default = 5672 例: 接受TCP侦听器连接的Erlang进程数。一旦打开了一个使用tcp连接的套接字,它就始终保持打开状态,直至任何一方关闭它或因为一个错误而终止。在建立一个连接时,一般为每一次请求产生一个新进程,num_acceptors就是控制产生新进程的个数。假设有一个监听进程,其任务是等待传入的tcp请求。只要一个请求到达,响应该连接请求的进程就变成了接收进程。默认的配置为num_acceptors.tcp = 10。 例: AMQP 0-9-1握手(socket连接和TLS握手之后)的最大时间,以毫秒为单位。 默认的配置为handshake_timeout = 10000。 例: 设置为'true'以在接受一个连接时执行反DNS反查询。 在rabbitmqctl中和web管理中将显示主机名称而不是IP地址。默认的配置为reverse_dns_lookups = true。 例: 开启后的效果 仅允许通过本地(即localhost)连接到代理的用户列表。如果您希望允许guest用户远程连接,则需要将其更改为 loopback_users = none。 要将其他用户限制为仅限localhost的连接,请像这样执行(monitoring是用户的名称): loopback_users.monitoring = true。默认的配置为loopback_users.guest = true。推荐设置loopback_users.guest = false。 例: 关于ssl的配置,内容比较多,参考 官网 。默认不配置。 选择要使用的认证/授权后端。可以配置ldap相关的设置。具体可以参考 access-control 。internal为由rabbitmq内部处理,默认的配置为 auth_backends.1 = internal。 例: RabbitMQ具有对各种SASL认证机制的可插拔支持。服务器内置了三种这样的机制:PLAIN,AMQPLAIN和RABBIT-CR-DEMO,以及EXTERNAL 可作为 插件使用 。您还可以通过 在插件中实现rabbit_auth_mechanism行为来实现自己的身份验证机制。有关常规插件开发的更多信息,请参阅 插件开发指南 。默认的配置为PLAIN和AMQPLAIN。 内置的机制: 例: 有关rabbitmq-auth-mechanism-ssl插件的配置,查看: https://github.com/rabbitmq/rabbitmq-auth-mechanism-ssl SSL handshake超时时间,毫秒为单位。默认的配置为ssl_handshake_timeout = 5000 。 例: rabbitmq的用户的密码加密算法。修改该值只会影响新创建的用户,对应老用户需要重置密码进行更新。一般情况下不更改。默认的配置为password_hashing_mole = rabbit_password_hashing_sha256。要使用SHA-512,请设置为rabbit_password_hashing_sha512。 例: 和web端的Import definitions、Export definitions有关。好像没啥用==。 默认的用户及其权限和vhost。如果一个connect没有配置以下的配置,则使用默认值进行连接。 默认用户的tag。默认的配置default_user_tags.administrator = true。一般不需要改。 例: heartbeat通常用来检测通信的对端是否存活(未正常关闭socket连接而异常crash)。其基本原理是检测对应的socket连接上数据的收发是否正常,如果一段时间内没有收发数据,则向对端发送一个心跳检测包,如果一段时间内没有回应则认为心跳超时,即认为对端可能异常crash了。 rabbitmq也不例外,heatbeat在客户端和服务端之间用于检测对端是否正常,即客户端与服务端之间的tcp链接是否正常。 heartbeat检测时间间隔的设置: 这里要注意的是:如果时间间隔配置为0,则表示不启用heartbeat检测。 例: 设置amqp协议最大允许的字节数。默认的配置为frame_max = 131072(单位为字节,也就是128k),注意该值不要设置过大,如果一条消息比较大(如传输文件),可以通过Publish Confirm和Consumer Acknowledgement机制,如设置过大,那么broker内存会容易被占完。也不要设置过小,保持在128k-1m之间。 引用:使用RabbitMQ传输大文件,保证其完整性 例: 初始化时的最大字节,不知道哪里使用的。原文:Set the max frame size the server will accept before connection tuning occurs。 例: 设置每个连接的最大允许通道数量。 0表示“没有限制”。默认的配置为channel_max = 128。 例: tcp连接相关的配置。尽量不要改。以下为默认的配置 例: 设置rabbitmq使用内存的阈值。有相对和绝对两种阈值。默认为vm_memory_high_watermark.relative = 0.4。 队列开始将消息导出到光盘来释放内存的高水位限制的值。 例如,当vm_memory_high_watermark被设置为0.4并且该值被设置为0.5时, 可以在节点使用总可用RAM的20%时开始分页。大于1.0的值可能很危险,应谨慎使用。 一种替代方法是使用持久队列并发布消息,作为持久性。 有了这个组合队列将消息更快地移动到磁盘。 另一种方法是配置队列来分页所有消息(都是持久和瞬态)到磁盘。 尽可能参阅 http://rabbitmq.com/lazy-queues.html 。 例: 内存使用情况报告策略。可以是以下之一,默认的配置为rss: allocated:使用Erlang内存分配器统计信息 rss:使用操作系统RSS内存报告。这使用特定于操作系统的手段,并可能启动短暂的子进程。 legacy:使用legacy内存报告(运行时考虑使用多少内存)。这个策略相当不准确。 erlang:与legacy相同,为了向后兼容而保留 例: 根据 watermarks检查内存级别。没发现具体作用。 例: 可用内存总量,不使用特定于操作系统的方式从环境中推断内存。 只有当节点可用的实际最大RAM数量与节点将要推断的值不匹配时,才应使用这种方法。 该值可以设置为整数个字节,或者可以以信息单位(例如“8GB”)设置。 例如,当该值设置为4 GB时,该节点会认为它在具有4 GB RAM的计算机上运行。默认不设置该值。 例: 和vm_memory_high_watermark类似,disk_free_limit是控制硬盘的使用阈值。RabbitMQ正在存储数据的分区的磁盘可用空间限制。当可用磁盘空间低于此限制时,将触发流量控制。该值可以相对于RAM的总量或以字节或以信息单位表示的绝对值(例如"50MB"或"5GB"或"5KB")来设置,或者,我们可以设置相对于可用RAM总量的限制。低于1.0的值可能很危险,应谨慎使用。默认为disk_free_limit.absolute = 50MB。 例: 网络分裂。一种在系统的任何两个组之间的所有网络连接同时发生故障后所出现的情况。发生这种情况时,分裂的系统双方都会从对方一侧重新启动应用程序,进而导致重复服务或裂脑。由网络分裂造成的最为严重的问题是它会影响共享磁盘上的数据。默认为ignore模式。如何处理网络分裂?详细的文档可以参考 官网文档 可用的模式是: 在消息中镜像同步批量大小。增加这将加快同步,但批量总大小(以字节为单位)不得超过2 GiB。该设置可用于RabbitMQ 3.6.0或更高版本。默认的配置为 mirroring_sync_batch_size = 4096(4k)。 例: 集群相关的配置,为了形成一个集群,新的(“空白”)节点需要能够发现他们的同伴。这可以使用各种机制(后端)来完成。有些机制假定所有集群成员都提前知道(例如,在配置文件中列出),其他机制是动态的(节点可以动态增删)。 内置的发现机制如下: cluster_formation.node_type:节点类型。默认为disc。 cluster_keepalive_interval:像集群里的其他子节点发送存活消息的间隔(毫秒)。默认为cluster_keepalive_interval = 10000 统计相关,与web管理插件显示有关。可配置的值如下: 例: 设置为true,以便使用HiPE预编译RabbitMQ的部分,这是Erlang的即时编译器。 这会以增加启动时间为代价来提高服务器吞吐量。 您可能会看到启动时延迟几分钟的成本提高20-50%。 这些数据非常依赖于工作负载和硬件。 HiPE支持可能不会编译到您的Erlang安装中。 如果不是,启用此选项只会导致显示一条警告消息,启动将按正常进行。 例如,Debian / Ubuntu用户需要安装erlang-base-hipe软件包。 HiPE在某些平台上完全不可用,特别包括Windows。 HiPE在17.5之前的Erlang / OTP版本中存在已知问题。 HiPE强烈建议使用最新的Erlang / OTP版本。默认的配置为hipe_compile = false。 等待集群中的Mnesia tables变得可用时使用的超时。默认的配置mnesia_table_loading_retry_timeout = 30000。 在等待集群中的Mnesia tables可用时,需要重试的次数。默认的配置mnesia_table_loading_retry_limit = 10。 在消息的字节数中,消息将被直接嵌入到队列索引中。详情请看 persister tuning 。默认的配置queue_index_embed_msgs_below = 4096。 是否启用后台定期强制GC为“等待”状态运行节点上的所有Erlang进程。 禁用后台GC可以减少客户端操作的延迟,保持启用状态可以减少二进制堆的RAM使用量(请参阅 https://www.erlang-solutions.com/blog/erlang-garbage-collector.html )。 在尝试此选项之前,请查看内存( http://www.rabbitmq.com/memory-use.html )。 默认的配置background_gc_enabled = false,当配置为true时,可以设置gc的间隔,默认的配置为background_gc_target_interval = 60000(毫秒)。 设置是否启用代理,启用后不能直连到broker。默认的配置proxy_protocol = false。 未知 有关web管理后台的配置。 查看 http://www.rabbitmq.com/stomp.html 。 http://www.rabbitmq.com/mqtt.html 查看 https://github.com/rabbitmq/rabbitmq-amqp1.0 查看 http://rabbitmq.com/ldap.html 。
❷ rabbitmq服务怎样配置调用本地
AMQP(高级消息队列协议) 是一个异步消息传递所使用的应用层协议规范,作为线路层协议,而不是API(例如JMS),AMQP 客户端能够无视消息的来源任意发送和接受信息。AMQP的原始用途只是为金融界提供一个可以彼此协作的消息协议,而现在的目标则是为通用消息队列架构提供通用构建工具。因此,面向消息的中间件 (MOM)系统,例如发布/订阅队列,没有作为基本元素实现。反而通过发送简化的AMQ实体,用户被赋予了构建例如这些实体的能力。这些实体也是规范的一 部分,形成了在线路层协议顶端的一个层级:AMQP模型。这个模型统一了消息模式,诸如之前提到的发布/订阅,队列,事务以及流数据,并且添加了额外的特性,例如更易于扩展,基于内容的路由。AMQP当中有四个概念非常重要virtual host,虚拟主机exchange,交换机queue,队列binding,绑定一个虚拟主机持有一组交换机、队列和绑定。为什么需要多个虚拟主机呢?因为RabbitMQ当中,用户只能在虚拟主机的粒度进行权限控制。因此,如果需要禁止A组访问B组的交换机/队列/绑定,必须为A和B分别创建一个虚拟主机。每一个RabbitMQ服务器都有一个默认的虚拟主机/。何谓虚拟主机(virtual host),交换机(exchange),队列(queue)和绑定(binding)队列(Queues)是你的消息(messages)的终点,可以理解成装消息的容器。消息就一直在里面,直到有客户端(也就是消费者,Consumer)连接到这个队列并且将其取走为止。不过,也可以将一个队列配置成这样的:一旦消息进入这个队列,此消息就被删除。队列是由消费者(Consumer)通过程序建立的,不是通过配置文件或者命令行工具。这没什么问题,如果一个消费者试图创建一个已经存在的队列,RabbitMQ会直接忽略这个请求。因此我们可以将消息队列的配置写在应用程序的代码里面。而要把一个消息放进队列前,需要有一个交换机(Exchange)。交换机(Exchange)可以理解成具有路由表的路由程序。每个消息都有一个称为路由键(routing key)的属性,就是一个简单的字符串。交换机当中有一系列的绑定(binding),即路由规则(routes)。(例如,指明具有路由键 “X” 的消息要到名为timbuku的队列当中去。)消费者程序(Consumer)要负责创建你的交换机。交换机可以存在多个,每个交换机在自己独立的进程当中执行,因此增加多个交换机就是增加多个进程,可以充分利用服务器上的CPU核以便达到更高的效率。例如,在一个8核的服务器上,可以创建5个交换机来用5个核,另外3个核留下来做消息处理。类似的,在RabbitMQ的集群当中,你可以用类似的思路来扩展交换机一边获取更高的吞吐量。交换机如何判断要把消息送到哪个队列?你需要路由规则,即绑定(binding)。一个绑定就是一个类似这样的规则:将交换机“desert(沙漠)”当中具有路由键“阿里巴巴”的消息送到队列“hideout(山洞)”里面去。换句话说,一个绑定就是一个基于路由键将交换机和队列连接起来的路由规则。例如,具有路由键“audit”的消息需要被送到两个队列,“log-forever”和“alert-the-big-de”。要做到这个,就需要创建两个绑定,每个都连接一个交换机和一个队列,两者都是由“audit”路由键触发。在这种情况下,交换机会复制一份消息并且把它们分别发送到两个队列当中。交换机不过就是一个由绑定构成的路由表。交换机有多种类型。他们都是做路由的,但是它们接受不同类型的绑定。为什么不创建一种交换机来处理所有类型的路由规则呢?因为每种规则用来做匹配分子的CPU开销是不同的。例如,一个“topic”类型的交换机试图将消息的路由键与类似“dogs.*”的模式进行匹配。匹配这种末端的通配符比直接将路由键与“dogs”比较(“direct”类型的交换机)要消耗更多的CPU。如果你不需要“topic”类型的交换机带来的灵活性,你可以通过使用“direct”类型的交换机获取更高的处理效率。
❸ Ubuntu16.04搭建rabbitmq集群
1.1、什么是RabbitMQ? RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成,因此也是继承了这些优点。 1.2、什么是AMQP? AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。它从生产者接收消息并递送给消费者,在这个过程中,根据规则进行路由,缓存与持久化。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如: Python 、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 1.3、RabbitMQ的基础概念 1.4、RabbitMQ的特性 2.1、环境:两台Ubuntu16.04主机 10.27.0.53 rabbitmq-1 10.27.0.130 rabbitmq-2 必须保证各个主机名之间可以ping通 2.2、安装Erlang 2.3、安装rabbitmq 2.4、安装完成后,验证一下服务是否正常 搭建好的rabbitmq默认是没有配置文件的,需要我们来手动添加 Rabbitmq的一些运行脚本存放在 /usr/sbin 下面 2.5、开启web管理插件 2.5.1、创建一个用户nova,并设置密码为123456 2.5.2、查看现有用户表 这个时候nova用户是不能访问web管理插件的,需要配置用户角色,用户角色可分为五类,超级管理员, 监控者, 策略制定者, 普通管理者以及其他。 可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。 可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等) 可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息。 仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。 无法登陆管理控制台,通常就是普通的生产者和消费者。 将nova添加到administrator用户组 此时的nova用户只能通过本地来登录其他的IP无法直接使用这个账号。所以需要对他进行授权,使用户nova /(可以访问虚拟主机) 中所有资源的配置、写、读权限以便管理其中的资源 查看用户授权 2.5.3、开启web管理插件并重启rabbitmq服务 以下为关闭插件命令 通过浏览器访问 [http://10.27.0.53:15672]输入用户名nova 密码123456就可以看到后台了 3.1、从管理界面可以看到,此时只有一个节点rabbitmq-1,我们需要把rabbitmq-2加进来,rabbitmq-2按照步骤2进行一系列安装就可以。此处不再细说。 3.2、添加节点 两台主机上安装的 RabbitMQ 都保证都可以正常启动,才可以进行以下操作 3.2.1、设置不同节点间统一认证的Erlang Cookie 这里将 rabbitmq-1 的该文件复制到 rabbitmq-2由于这个文件权限是 400为方便传输,先修改权限,非必须操作,所以需要先修改rabbitmq-2中的该文件权限为 777 然后将rabbitmq-1中的该文件拷贝的rabbitmq-2中 最后将权限和所属用户/组修改回来 此时rabbitmq-2节点需要重启一下服务 注意事项 cookie在所有节点上必须完全一样,同步时一定要注意。 erlang是通过主机名来连接服务,必须保证各个主机名之间可以ping通。可以通过编辑/etc/hosts来手工添加主机名和IP对应关系。如果主机名ping不通,rabbitmq服务启动会失败。 3.2.2、通过rabbitmqctl cluster_status命令,可以查看和个节点的状态,节点的名称是[email protected], rabbitmq-1 rabbitmq-2 3.2.3 将两个节点组成集群 因为rabbitmq-server启动时,会一起启动节点和应用,它预先设置RabbitMQ应用为standalone模式。要将一个节点加入到现有的集群中,你需要停止这个应用并将节点设置为原始状态,然后就为加入集群准备好了。使用rabbitmqctl stop_app仅仅关闭应用。 将2加入1中 启动节点2的应用 如果要使用内存节点,则可以使用以下命令:其中–ram指的是作为内存节点,要是想做为磁盘节点的话,就不用加–ram这个参数了 集群配置好后,可以在 RabbitMQ 任意节点上执行 rabbitmqctl cluster_status 来查看是否集群配置成功。 Rabbitmq-1 Rabbitmq-2 同时在Web管理工具中也可以看到效果 上面配置RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制,虽然该模式解决一部分节点压力,但队列节点宕机直接导致该队列无法使用,只能等待重启,所以要想在队列节点宕机或故障也能正常使用,就要复制队列内容到集群里的每个节点,需要创建镜像队列。 镜像队列概念:镜像队列可以同步queue和message,当主queue挂掉,从queue中会有一个变为主queue来接替工作。镜像队列是基于普通的集群模式的,所以你还是得先配置普通集群,然后才能设置镜像队列。镜像队列设置后,会分一个主节点和多个从节点,如果主节点宕机,从节点会有一个选为主节点,原先的主节点起来后会变为从节点。queue和message虽然会存在所有镜像队列中,但客户端读取时不论物理面连接的主节点还是从节点,都是从主节点读取数据,然后主节点再将queue和message的状态同步给从节点,因此多个客户端连接不同的镜像队列不会产生同一message被多次接受的情况。 设置镜像队列策略 在普通集群的中任意节点启用策略,策略会自动同步到集群节点 命令格式 在任意一个节点上执行 集群重启 集群重启时,最后一个挂掉的节点应该第一个重启,如果因特殊原因(比如同时断电),而不知道哪个节点最后一个挂掉。可用以下方法重启: 先在一个节点上执行 在其他节点上执行 查看cluster状态是否正常(要在所有节点上查询)。 添加用户 处于安全的考虑,guest这个默认的用户只能通过 http://localhost:15672 来登录,其他的IP无法直接使用这个账号。所以我们需要添加一个其他用户。 命令格式 删除用户 命令格式 修改密码 命令格式 用户授权 命令格式 该命令使用户nova /(可以访问虚拟主机) 中所有资源的配置、写、读权限以便管理其中的资源 查看用户授权 命令格式 查看当前用户列表 可以看到添加用户成功了,但不是administrator角色 添加角色 这里我们也将nova用户设置为administrator角色 命令格式 再次查看权限 清除权限信息 命令格式 下一篇为测试文章 https://www.jianshu.com/p/f4153f72e4c1