当前位置:网站首页>不公平分发
不公平分发
2022-07-20 17:48:00 【一个风轻云淡】
在最开始的时候我们学习到RabbitMQ分发消息采用的轮训分发,但是在某种场景下这种策略并不是很好,比方说有两个消费者在处理任务,其中有个消费者1处理任务的速度非常快,而另外一个消费者2
处理速度却很慢,这个时候我们还是采用轮训分发的化就会到这处理速度快的这个消费者很大一部分时间处于空闲状态,而处理慢的那个消费者一直在干活,这种分配方式在这种情况下其实就不太好,但是
RabbitMQ并不知道这种情况它依然很公平的进行分发。
为了避免这种情况,我们可以设置参数channel.basicQos(1);
public class UnfairWork {
public final static String QUEUE_NAME="hello3";
public static void main(String[] args) throws Exception {
System.out.println("c1应答短....");
Channel channel = untils.getChannel();
/**
* 不公平分发
* 设置参数
*/
int prefetchCount=1;
channel.basicQos(1);
/**
* 消费者信息
* 1.消费哪个队列
* 2.消费成功以后是否要自动应答,true自动应答,false手动挡
* 3.消费者未成功消费的回调内容1
* 4.消费者取消的回调
*
*/
//声明 接收消息
DeliverCallback deliverCallback=(consumerTag, delivery)->{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//1.消息标记
// 2.false 代表只应答接收到的哪个传递的信息,true为应答所有的消息包括传递过来的消息
channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);
System.out.println("接收到的消息"+new String(delivery.getBody()));
};
//取消 消息的回调
CancelCallback cancelCallback= consumerTag -> {
System.out.println(consumerTag+"消息消费者中断");
};
channel.basicConsume(QUEUE_NAME,false,deliverCallback,cancelCallback);
}
}
/**
* 这个和轮循的代码是一样的
*/
public class UnfairProduce {
public static final String QUEUE_NAME="hello3";
public static void main(String[] args) throws IOException, TimeoutException {
Channel channel = untils.getChannel();
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
//从控制太中接受消息
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext())
{
String message=scanner.next();
channel.basicPublish("",QUEUE_NAME,null,message.getBytes(StandardCharsets.UTF_8));;
System.out.println("发送消息完成"+message);
}
}
}
边栏推荐
- What is the self built database of dedicated line /vpn gateway / intelligent access gateway?
- Market Research and investment forecast report of China's tungsten powder industry (2022 Edition)
- 预制财务凭证BAPI
- 字符串匹配(华为)
- 项目经理如何有效地进行项目工作量估算?
- 中国钨粉行业市场研究与投资预测报告(2022版)
- 肝胆外科疾病,存在误诊和/或漏诊、误诊,医疗机构承担主要赔偿责任
- 2022年备战金九银十,Android从基础到架构进阶全方面面试题解析(含答案及源码)
- 综述 | 实例分割研究
- 斥资2900万美元!以色列成立量子计算研发中心
猜你喜欢
斥资2900万美元!以色列成立量子计算研发中心
LeetCode 练习——剑指 Offer 66. 构建乘积数组
关于数据库分库分表的一切都在这里了
2022清华暑校笔记之L2_2 CNN和RNN基础介绍
传感器实验——485空气温湿度
Maixll-Dock 條形碼識別
[format string] the principle and utilization of format string vulnerability
查询mysql的最大连接数和当前连接数
Exercice leetcode - Échange de doigts 66. Construire un tableau de produits
二师兄的纪录片
随机推荐
Maixll-Dock 條形碼識別
Leetcode exercise - Sword finger offer 66 Build product array
公网IP自建数据库这种DTS实例类型,有什么特点?
【C语言】文件操作
DTS中的数据库账号出现问题最多的是哪几种账号?
Leetcode 101. 对称二叉树
What is the difference between self built database transmission through dedicated line /vpn gateway / intelligent access gateway?
Cloud rendering, the "upstart" in the design industry
使用公网IP自建数据库这种DTS实例类型需要注意哪些点?
探讨基于小程序解决国产系统的应用生态问题
What should we pay attention to when using the DTS instance type of public IP self built database?
Winform UI界面设计例程——获取电脑SN号
什么是数据库密码?
什么是专线/VPN网关/智能接入网关的自建数据库?
How does AI predict the COVID-19? A summary of Georgia Institute of technology's latest "data centric epidemic prediction"
什么是公网IP自建数据库?
QT simple serial port assistant
Openvino安装时的一些记录
九章云极DataCanvas YLearn因果学习开源项目:从预测到决策
机器学习-Kmeans