多线程情况下IBMMQ报文丢失原因分析

背景

最近工作中,使用IBMMQ,重启服务时有偶发性的报文丢失情况,应用从队列中获取到了消息,但是线程停止没有处理。

分析

消息处理线程流程:

  1. 判断线程状态是否可用,如果不可用直接返回。
  2. 使用MQQueue.get方法获取消息。
  3. 如果消息为null继续循环;否则判断线程是否可用,可用则进行处理,不可用则产生消息丢失。

服务关闭流程:
1.设置线程状态为不可用
2.睡眠2秒等待线程处理当前内容。
3.线程关闭;tp.shutdown
4. 线程等待结束。tp.awaitTermination(50,SENCONDS)

分析以上过程,发生消息丢弃必为
1.当前线程状态可用
2.获取消息
3.关闭服务:线程不可用
4.关闭服务:睡眠2秒
5.关闭线程
6.处理消息

获取消息与处理消息之间必须大于2s,但是消息获取成功后立即处理,一般情况不会超过2秒。所以将原因定位到获取消息方法中。
分析MQQueue.get方法,如果队列中没有消息,会发生等待,等待时间由参数Wait Interval (-WI)决定。
该参数解析详见IBM官网说明.
在这里插入图片描述

WI参数用来设置适配器等待消息接收的时间。

在这里插入图片描述

参数0:不进行等待
参数S: 一直等待
wait_interval_in_milliseconds:等待时间
默认为每次等待1s
在等待时间内,线程无法停止。

分析代码,发现该参数我们代码默认设置了10s,所以在执行服务关闭流程4时,需要等待获取消息结束。
如果在1s时获取消息,在2s时关闭服务,则在4s时线程关闭,如果在6s时获取到消息,此时线程关闭,则发生消息丢失。

改进

修改IW参数值,设置为1,保证在服务关闭睡眠2s时间段内可以获取消息完成,不影响服务关闭流程。

备注

awaitTermination(s,unit)方法说明:
在单位s时间段内,如果线程全部处理完成,则结束返回true;在单位s时间段内,如果线程未全部处理完成,则继续等待;超过单位s时间后,则返回false。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/569186.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Seurat -- Introduction to scRNA-seq integration 跟随学习记录

文章目录 数据是如何转换的原始ifnb数据对象Splits object后的数据对象数据对象构建完成后的标准流程Normalization后的数据对象scale 后的数据对象 不同的样本进行整合JoinLayers干了什么 数据是如何转换的 seurat object 中assays R N A l a y e r s RNAlayers RNAlayersco…

卡尔曼滤波器(一):卡尔曼滤波器简介

观看MATLAB技术讲座笔记,该技术讲座视频来自bilibili账号:MATLAB中国。 一、什么是卡尔曼滤波器 卡尔曼滤波器是一种优化估计算法,是一种设计最优状态观测器的方法,其功能为: 估算只能被间接测量的变量;通…

​漏电继电器JHOK-ZBLφ150mm 0.03-3A 0.2-2S导轨安装JOSEF约瑟

系列型号: JHOK-ZBL多档切换式漏电(剩余)继电器(导轨) JHOK-ZBL1多档切换式漏电(剩余)继电器 JHOK-ZBL2多档切换式漏电(剩余)继电器 JHOK-ZBM多档切换式漏电(…

深入理解分布式事务① ---->分布式事务基础(四大特性、五大类型、本地事务、MySQL并发事务问题、MySQL事务隔离级别命令设置)详解

目录 深入理解分布式事务① ---->分布式事务基础(四大特性、五大类型、本地事务、MySQL并发事务问题、MySQL事务隔离级别命令设置)详解事务的基本概念1、什么是事务?2、事务的四大特性2-1:原子性(Atomic&#xff09…

STM32点灯大师(中断法)

一、使用CubeMX配置 新增加了RCC进行配置 二、代码 需要重写虚函数,给自己引用

Python打怪升级(4)

在计算机领域常常有说"合法"和"非法"指的是:是否合理,是否有效,并不是指触犯了法律。 random.randint(begin,end) 详细讲解一下这个random是指模板,也就是别人写好的代码直接来用,在Python当中,…

《R语言与农业数据统计分析及建模》学习——ggplot2绘图基础

一、农业科研数据可视化常用图形及用途 1、数据可视化的重要性 通过可视化,我们可以更直观地理解和分析数据的特征和趋势。 2、常用图表类型及其概述 散点图:用于展示两个变量之间的关系,可用于观察数据的分布、趋势和异常值。 折线图&…

网络安全之CSRFSSRF漏洞(上篇)(技术进阶)

目录 一,CSRF篇 二,认识什么是CSRF 三,实现CSRF攻击的前提 四,实战演练 【1】案例1 【2】案例2 【3】案例3 【4】案例4(metinfo) 一,CSRF篇 二,认识什么是CSRF CSRF&#x…

YesPMP众包平台最新项目

YesPMP一站式互联网众包平台,最新外包项目,有感兴趣的用户可进入平台参与竞标。 (竞标后由项目方直接与服务商联系,双方直接对接) 1.查看项目:个人技术-YesPMP平台 2.查看项目&#xff1…

【003_音频开发_基础篇_Linux进程通信(20种你了解几种?)】

003_音频开发_基础篇_Linux进程通信(20种你了解几种?) 文章目录 003_音频开发_基础篇_Linux进程通信(20种你了解几种?)创作背景Linux 进程通信类型fork() 函数fork() 输出 2 次fork() 输出 8 次fork() 返回值fork() 创建子进程 方…

zkVM选型要点

1. 引言 当选择ZK工具,来做可验证链下计算来扩容区块链时,需考虑: 1)为何应选择zkVM?2)zkVM有哪些基本功能?3)哪些zkVM可提供这些基本功能? 2. 为何应选择zkVM&#x…

OpenCV——图像分块局部阈值二值化

目录 一、算法原理1、算法概述2、参考文献 二、代码实现三、结果展示 OpenCV——图像分块局部阈值二值化由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、算法概述 针对目前局部阈值二值…

消息队列 Kafka 入门篇(二) -- 安装启动与可视化工具

一、Windows 10 环境安装 1、下载与解压 首先,访问Apache Kafka的官方下载地址: https://kafka.apache.org/downloads 在本教程中,我们将使用kafka_2.13-2.8.1版本作为示例。下载完成后,解压到您的工作目录的合适位置&#xff…

目标检测——YOLOv6算法解读

论文:YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications (2022.9.7) 作者:Chuyi Li, Lulu Li, Hongliang Jiang, Kaiheng Weng, Yifei Geng, Liang Li, Zaidan Ke, Qingyuan Li, Meng Cheng, Weiqiang Nie, Yiduo Li, Bo …

企业商业活动如何获得央级媒体的采访报道?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 企业想要获得央级媒体的采访报道,确实需要精心策划和准备: 一、如何巧妙给媒体报选题 精准定位:首先要明确企业的核心价值、创新点或行业影响力&…

【C++】手撕list(list的模拟实现)

目录 01.节点 02.迭代器 迭代器运算符重载 03.list类 (1)构造与析构 (2)迭代器相关 (3)容量相关 (4)访问操作 (5)插入删除 我们在学习数据结构的时候…

StartAI智能绘图软件出现“缺少Python运行库”怎么办?

StartAI做为一款国产AI界的新秀,是一款贴合AIGC新手的智能绘图软件。新手安装遇见“缺少Python运行库”怎么办”?小编一招搞定~ 解决方法:手动下载【resource文件】,将文件添加到安装目录下。 点击链接进行手动下载噢~ 确保 Star…

图像处理之模板匹配(C++)

图像处理之模板匹配(C) 文章目录 图像处理之模板匹配(C)前言一、基于灰度的模板匹配1.原理2.代码实现3.结果展示 总结 前言 模板匹配的算法包括基于灰度的匹配、基于特征的匹配、基于组件的匹配、基于相关性的匹配以及局部变形匹…

Spring-IOC之组件扫描

版本 Spring Framework 6.0.9​ 1. 前言 通过自动扫描,Spring 会自动从扫描指定的包及其子包下的所有类,并根据类上的特定注解将该类装配到容器中,而无需在 XML 配置文件或 Java 配置类中逐一声明每一个 Bean。 支持的注解 Spring 支持一系…

Mysql索引详解(索引分类)

文章目录 概述索引对查询速度的影响索引的优缺点索引类型一级索引和二级索引的区别MySQL 回表联合索引(最左前缀原则主键索引和唯一索引的区别BTree索引和Hash索引的区别 覆盖索引索引下推加索引能够提升查询效率原因MySQL 索引结构采用 B树原因索引失效的场景MySQL…