首页 > 其他分享 >rabbitmq - 流量控制

rabbitmq - 流量控制

时间:2024-10-31 14:44:18浏览次数:7  
标签:控制 false String Receive 流量 rabbitmq import channel

在 helloworld 的案例中,如果开启两个 Receive,消息被平均发送给了 2 个 Receive。

很多情况下,我们并不希望消息平均分配,可以对代码做如下修改。

场景:a 侦听器处理快,b 侦听器处理的慢,我们希望能将更多的消息分配给a。

import cn.swsk.springboot.rgyx.jx.test.ConnectionUtil;
import com.rabbitmq.client.*;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * @author Mr.css
 * @date 2020-11-12 9:31
 */
public class Receive {
    private static final String QUEUE_NAME = "queue_name";

    public static void main(String[] args) {
        try {
            Connection connection = ConnectionUtil.getConnection();
            Channel channel = connection.createChannel();
            channel.queueDeclare(QUEUE_NAME, false, false, false, null);

            // 限制消息接收的数量
            channel.basicQos(0,1,false);

            DefaultConsumer consumer = new DefaultConsumer(channel) {

                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
                                           byte[] body) {
                    String message = new String(body, StandardCharsets.UTF_8);
                    System.out.println("[Receive]:" + message);

                    try {
                        Thread.sleep(500);
                        //手动应答
                        channel.basicAck(envelope.getDeliveryTag(), false);
                    } catch (InterruptedException | IOException e) {
                        e.printStackTrace();
                    }
                }
            };
            //自动应答设置为false
            channel.basicConsume(QUEUE_NAME, false, consumer);
        } catch (IOException | ShutdownSignalException | ConsumerCancelledException e) {
            e.printStackTrace();
        }
    }
}

Qos(Quality of Service)直译是:服务质量,但是在这个场景下,理解为带宽分配、流量控制会更加合理

注意:MQTT 服务中也有一个 Qos 的概念,与当前不是一个东西,MQTT 是一种网络传输协议,rabbitmq 也支持使用这种协议。

basicQos(prefetchSize, prefetchCount, global)

These settings impose limits on the amount of data the server will deliver to consumers before requiring acknowledgements.Thus they provide a means of consumer-initiated flow control.

这些设置限制了服务器在请求确认之前将发送给消费者的数据量。因此,它们提供了一种消费者发起的流量控制方法。

参数说明

prefetchSize:服务器将提供的最大内容量(以字节为单位),如果没有限制则为0,似乎必须为0,程序执行到此报错,说还没有实现不为0的情况。

maximum amount of content (measured in octets) that the server will deliver, 0 if unlimited

prefetchCount:服务器将发送的最大消息数,如果没有限制,则为0。

maximum number of messages that the server will deliver, 0 if unlimited

global:设置是否应用于整个Connection,一个Connection可以有多个Channel,false则只对当前Channel有效。

true if the settings should be applied to the entire channel rather than each consumer

标签:控制,false,String,Receive,流量,rabbitmq,import,channel
From: https://www.cnblogs.com/chenss15060100790/p/18517779

相关文章

  • rabbitmq - ack机制
    疑问:在写demo的时候,如果client被强制中断,消息来不及处理,这时候消息又出队列了,这样不是会产生严重的问题嘛?一个会话中,可以同时处理一批数据,如果一条失败了,之前的也要求回滚的话,要怎么处理?获取一个消息之后,发现程序无法处理这条消息,想要退还回去,该怎么办?方案:这就涉及到队......
  • P2Link教你如何不被老板开除——远程桌面控制
    以上是个小玩笑......
  • Unity控制物体透明度的改变
    目录标题效果图代码调用注意事项效果图代码注意:在控制全部的模型进行透视时,已经隐藏的子物体仍然要处理。usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingDG.Tweening;publicclassFadeModel{privateGameObj......
  • AWS 控制台打开 MFA 二次认证
    要求为保证AWS云帐号安全,所有控制台用户需要输入二次密码方可登录。这种机制避免了密码丢失,被别有用心者直接登录AWS控制台的风险。准备工作下载安装GoogleAuthenticator对于Android用户软件包来源:https://github.com/google/google-authenticator-android/rel......
  • 为数据集而生的 SQL 控制台
    随着数据集的使用量急剧增加,HuggingFace社区已经变成了众多数据集默认存放的仓库。每月,海量数据集被上传到社区,这些数据集亟需有效的查询、过滤和发现。每个月在HuggingFaceHub创建的数据集我们现在非常激动地宣布,您可以直接在HuggingFace社区中对您的数据集进行SQL......
  • 【操作系统】2.并发控制
    并发控制(ConcurrencyControl)是指在多线程或多进程环境中,确保多个操作在共享资源上的访问不会发生冲突或产生不一致的情况。并发控制的核心目标是在允许并发操作的同时,保证系统的正确性、数据的一致性和完整性。在并发环境下,不同的线程或进程可能会同时访问共享资源(例如变量、文......
  • Oracle 第14章:并发控制
    在Oracle数据库中,并发控制是一个关键概念,因为它确保了多个用户或事务可以同时访问数据库而不干扰彼此的工作。并发问题主要出现在多用户环境中,当多个事务试图同时修改相同的数据时可能发生数据不一致的问题。并发问题及解决方案并发问题:脏读(DirtyReads):一个事务读取了另......
  • Proportional Controller比例控制器
    ProportionalController比例控制器通过接收外部的控制信号,将这些信号转换为相应的机械位移或力,进而驱动比例阀的阀芯移动,从而改变阀口的开度,实现对压力、流量等参数的连续、按比例控制。连续控制:与开关控制相比,比例阀控制器能够实现对压力、流量等参数的连续、无级调节。高......
  • 控制柜的分类
    通用电气GE 模块IC693CPU323LT 通用电气GE 模块IC693CPU323RR控制柜的分类多种多样,根据不同的功能和用途,可以分为以下几种主要类型:一、按功能和用途分类动力控制柜:主要用于控制电机、变频器、发电机等动力设备。它能够实现对电机的启停、调速、正反转等控制功能,同时具备......
  • 程序化交易策略里,风险管理和心态控制怎样平衡?
    Python股票接口实现查询账户,提交订单,自动交易(1)Python股票程序交易接口查账,提交订单,自动交易(2)股票量化,Python炒股,CSDN交流社区>>>风险识别与评估程序化交易面临多种风险,包括市场风险、技术风险等。市场风险源于市场波动,价格变动可能使策略失效。技术风险则与交易系统......