仲裁队列 配置方法 在声明队列时,将队列的“xqueuetype”参数设置为“quorum”。此参数只能在声明队列时设置,不能通过Policy设置。 仲裁队列默认的复制因子是5。 以下示例演示在Java客户端设置仲裁队列。 ConnectionFactory factory newConnectionFactory(); factory.setRequestedHeartbeat(30); factory.setHost(HOST); factory.setPort(PORT); factory.setUsername(USERNAME); factory.setPassword(PASSWORD); finalConnection connection factory.newConnection(); finalChannel channel connection.createChannel(); // 创建队列参数Map Map arguments newHashMap<>(); arguments.put("xqueuetype", "quorum"); // 声明仲裁队列 channel.queueDeclare("testquorumqueue", true, false, false, arguments); 以下示例演示在 RabbitMQ WebUI页面设置仲裁队列。 图1 设置仲裁队列 设置完成后,在“Queues”页面查看队列类型是否为“quorum”,如图2所示。“Node”中的“+2”表示该队列有2个副本,蓝色表示这两个副本消息同步已经完成,如果为红色则表示部分消息还未同步。 图2 查看队列类型 在“Queues”页面,单击队列名称,进入队列详情页。查看当前仲裁队列主副本所在节点和在线副本所在节点。 图3 队列详情页 设置仲裁队列的长度 通过配置Policy或者队列属性的方式可以限制仲裁队列的长度和在内存中保存的长度。 xmaxlength:仲裁队列最大消息数。如果超过则丢弃消息,或者发送到死信交换器。 xmaxlengthbytes:仲裁队列最大总消息大小(字节数)。如果超过则丢弃消息,或者发送到死信交换器。 xmaxinmemorylength:限制仲裁队列的内存中最大消息数量。 xmaxinmemorybytes:限制仲裁队列的内存中的最大总消息大小(字节数)。 以下举例说明通过配置Policy或者队列属性的方式限制内存中保存的仲裁队列长度。 配置Policy方式,推荐使用此方式。 图4 使用Policy设置xmaxinmemorybytes 配置队列属性方式。 图5 使用队列属性设置xmaxinmemorylength