当前位置:网站首页>阻塞队列实现异步消费
阻塞队列实现异步消费
2022-08-09 04:57:00 【魏云舒】
业务场景
- 通过极光推送向设备端发送消息通知,为了用户能够得到及时响应,采用异步消息推送。将用户的请求发送给消息队列,用户实时响应,启用一个线程消费,发送消息。
核心代码
// 缓存推送消息
private BlockingQueue<SendPushParam> sendPushQueue = new LinkedBlockingQueue<>(2000);
// 消费者线程:servlet启动时加载,启动这个线程发送推送指令
@PostConstruct
public void initQueueConsumer() {
log.debug("创建队列消费线程");
this.consumerThread = new Thread(() -> {
while (true) {
try {
SendPushParam sendPushParam = sendPushQueue.take();
if (sendPushParam == null) {
continue;
}
log.trace("消费推送请求信息: {}", sendPushParam);
sendPushDirectly(sendPushParam);
} catch (Exception e) {
log.error("消费推送请求信息失败: {}", e.getMessage());
}
}
});
this.consumerThread.start();
}
// 生产者线程:发送推送则写入消息队列
@Override
public void sendPush(SendPushParam param) {
if (Boolean.TRUE.equals(param.getAsync())) {
boolean offered = sendPushQueue.offer(param);
if (!offered) {
log.error("异步推送, 加入队列失败,尝试直接推送");
}
log.trace("异步推送加入队列成功");
} else {
log.debug("直接推送");
sendPushDirectly(param);
}
}
参考阅读
- BlockingQueue
- [BlockingQueue(阻塞队列)](
边栏推荐
猜你喜欢
不能提取结果集,SQL [n / a]; org.hibernate.exception.SQLGrammarExcept是嵌套的异常
【Harmony OS】【FAQ】鸿蒙问题合集1
杰理之智能充电仓低电发码关机 触摸不开机【篇】
保存Simulink仿真模型为图片或者PDF的方法
Why do enterprises need business intelligence BI in the digital age
JS-DOM-全局、局部、隐式变量,数组()\函数、 prompt输入对话框、confirm(确定用户的决定-弹出对话框)
LN论文、五种归一化原理和实现
EDI对接 New York & Company案例
软件测试的方法详细介绍
基于ABP和Magicodes实现Excel导出操作
随机推荐
杰理之电话打入,远端听不到声音【篇】
【HMS core】【ML kit】Machine Learning Service FAQ
在快手工作是一种什么体验
程序设计6大原则
leetcode:402. 移掉 K 位数字
安装pytorch和cuda
2022-08-07 反思
C进阶 - 程序的编译(预处理操作) + 链接
供应商对接Chewy的EDI需求
Golang入门教程
JS-全局dom对象的使用---使用htm样式和js函数动作的完全分离
亚马逊面对风控,自养号测评时应该怎么做?
Still don't know what business intelligence (BI) is?After reading this article, you will understand
MySQL: Intent Shared Locks and Intentional Exclusive Locks | Deadlocks | Lock Optimization
如何剪裁svg并压缩
力扣242-有效的字母异位词——哈希表法
I.MX6U-ALPHA开发板(高精度定时器)
matlab simulink球杆控制系统的模糊PID控制设计
perl基础语法归纳
抖音直播带货的4个技巧,提升直播间转化率!