MQ配置和编程最佳实践

MQ Exporler 配置 IBM MQ集群并实现测试集群队列的负载均衡 本文描述在MQ Exporler 配置集群的方法 1.新建3个队列管理器,分别为QM1,QM2,QM3(这三个队列管理器可以在不同的主机,不同环境上) 2.在MQ Exporler 上添加这三个队列管理器,确保连接通畅 3.在“队列管理器集群”中新建集群,命名为“CLUSTER_TEST”,默认会选择两个队列管理器进入完整存储库中,我们选择QM1,QM2 4.选择好 阅读详情

MQ配置和编程最佳实践
第一部分:有关MQ对象配置的最佳实践

对于MQ系统配置,我们要规划MQ通讯网络,确定系统的拓扑结构,确定各种对象的属性和命名规则并创建所需的各种对象等,首先,我们谈一谈在系统建设之初,如何设计和定义MQ的各种对象。

1、有关队列管理器:

创建队列管理器时,应考虑的因素主要有:

1) 队列管理器的日志类型以及日志文件的大小和个数,要根据用户数据量的大小、各个队列上的消息总容量,来计算日志的总容量,以免在系统运行过程中出现日志写满的情况;

2) 应该为队列管理器指定和建立死信队列;

3)对最多打开句柄数MAXHANDS(缺省为256,如果您需要多于256个应用程序同时连接队列管理器,应增大该值),最大消息长度MAXMSGL,最多的未提交的消息个数MAXUMSGS属性(缺省为10000,如果您使用了消息分段或分组,某个大消息的分段个数超过了10000,应增大该值)的考虑;

4) 创建完队列管理器之后,应修改队列管理器的配置文件,考虑有关TCP和通道有关的参数的配置,举例如下:

TCP:KeepAlive=YesChannels:AdoptNewMCA=ALLPipeLineLength=2MaxActiveChannels=200

 

2、有关队列:

对于队列的属性,应该考虑的因素主要有:

1) 永久性和非永久性设置:尤其要注意的是DEFPSIST属性的缺省值为No,若要保证消息的安全可靠,必须将其设置为Yes;

2) 对于本地队列和传输队列,要考虑队列的最大深度MAXDEPTH(缺省为5000,应根据实际情况计算该值),队列中每个消息的最大字节数MAXMSGL的配置。

3、有关通道:

对于通道的属性,应该考虑的因素主要有:

1) 确定通道的运行方式采用长连接的方式还是触发的方式,通常,对于需要频繁启动的通道,不适宜采用触发的方式。若采用触发方式启动通道,触发类型应为FIRST;

2) 对于发送类型的通道,要考虑通道的断开间隔(DISCINT)、短重试次数(SHORTRTY)、短重试间隔(SHORTTMR)、长重试次数(LONGRTY)、长重试间隔(LONGTMR)、批处理大小(BATCHSZ)的配置。

第二部分:有关MQ程序开发的最佳实践
通常大家在使用MQ时,一般在系统设计之初只考虑MQ的系统配置,而很少提前考虑应用程序编写的指导原则,往往是边写边想,边想边写,边写边改,使得开发效率和质量都比较低,为了使大家更快、更好地开发出MQ应用程序,在该部分我们给出与MQ程序开发相关的一些最佳实践,供大家参考。这里我们无法做到面面俱到,并且由于每个用户的具体需求不同,每条原则都不能一概而论,但是从普遍意义上可以作为您的参考。

为了更好地掌握和了解MQ编程的技巧,我们首先要熟悉MQ的消息通讯模式,这将帮助你更好地理解MQ编程的最佳实践。通常,MQ有两种通讯模式,即数据报 (Datagram) 方式和请求/应答(Request/Reply) 方式:其中,Datagram方式通常又被称为"Send And Forget"(发送/忽略),是最简单的通讯模式,应用程序只需在创建完消息之后,利用MQ的API将消息发送到队列中,它充分利用了MQ确保消息传输,并且传一次且仅传一次(once and once only)的优势,发送端应用程序无需关心消息何时被处理。

Request/Reply(请求/应答)方式相对复杂一些,在消息发出之后,你需要等待对方的处理结果,在这种情况下,你通常需要考虑其他一些问题,如:

等待应答的时间是多少?

如果没有收到应答,是否再次发出请求?

应答发出之前是否会有数据库操作或其他交易被执行?

本次请求/应答过程的会话(session)信息是否需要被保留?

通常,我们要根据用户的需求来决定采用何种通讯模式,不同的通讯模式之下对应用程序的考虑将会有所不同,使用的MQ API的参数和选项也将不同。

为了使你的MQ应用能够更加健壮,并且具有更强的可维护性,我们要学会灵活高效地使用MQ的一些特性以及相关的API选项,从而提到应用程序的质量、灵活性、可靠性和性能。这里,我们将给出一些较典型的建议。

1. 在每一个MQ API调用之后,必须检查完成码(completion code)和原因码(reason code),对于非零的返回码,必须进行相应的处理,必要时,最好将返回码记录错误日志,从而在应用程序出现运行故障时便于检查和处理。

在MQ 中,所有的API调用都会得到其完成码和原因码,完成码有MQCC_OK、MQCC_WARNING、MQCC_FAILED等,MQCC_OK表示调用成功,当得到MQCC_WARNING、MQCC_FAILED返回码时,表示API执行不完全成功,你需要进一步检查原因码,通过不同的原因码分析失败原因。如:原因码2033代表队列已空,没有消息可取;2080代表消息的实际长度超过了你在程序代码中设置的缓冲区长度等等。

2. 对MQCONN, MQOPEN,MQCLOSE, MQDISC的使用

由于MQCONN, MQOPEN,MQCLOSE, MQDISC相对于MQGET和MQPUT来说是比较消耗资源的几个函数,在一个应用中,即使你需要对某个队列进行多次读写操作,也不要对每一次读写都调用一次MQCONN, MQOPEN,MQCLOSE, MQDISC函数,正确的做法应该是,调用一次MQCONN, MQOPEN就可以对队列进行多次读写操作,另外,一定别忘记对称地使用MQCLOSE, MQDISC函数将相关资源释放掉。

3. 读取消息时,等待时间间隔的设置

对队列的读取操作,可以有两种方式,即轮巡方式和触发方式(利用MQ的触发功能动态调起应用程序)。在采用轮巡方式读取队列时,在MQGET时,我们需要设置消息读取选项MQGMO_WAIT,同时指定等待时间间隔。不少用户将时间间隔设定为MQWI_UNLIMITED以实现轮巡的目的,这样做的弊端在于在没有消息到达时应用程序陷入无限的等待,无法接收来自外部系统的相关信号,MQCLOSE,MQDISC调用也无法被执行,因此,我们建议避免采用这种方式,推荐的做法是设置特定的等待时间间隔,然后再循环发出MQGET调用。

4. 如果在同步点控制之下使用MQGET,在所有MQGET调用之后,必须检查消息的回滚次数(Backout Count)。

如果某个消息是在同步点控制之下读取的,并且由于某种原因消息被回滚,消息描述符中(Message Descriptor)的BackoutCount字段的值将被加1,你需要判断该数值,如果它大于某个阈值,你需要使用其它手段来处理该消息。否则,在某些情况下会导致读取消息-消息被回滚-再读取消息-消息再被回滚的死循环。

例如:你使用了触发机制设定当队列中消息到达时,触发某个应用程序,该应用程序在MQ XA Resource Manager的控制之下,读取消息,并且利用其数据对数据库进行更新,假设数据库出现问题,无法成功进行数据库操作,消息将被回滚;这时,又满足了触发条件,又会触发起该应用程序,周而复始,陷入死循环。在这种情况下,你必须在程序中加入对BackoutCount的判断。

5. 当处理backout消息时,可以使用队列的BOTHRESH 和 BOQNAME属性。

如4 中所言,如果某个消息是在同步点控制之下读取的,并且由于某种原因消息被回滚,消息描述符中的BackoutCount字段的值将被加1,你需要判断该数值,如果它大于某个阈值,你需要使用其它手段来处理该消息。在处理该消息的应用中,你可以将其与设定的阈值做比较,这时,阈值会被写死在程序中,为了提高其灵活性,你可以使用队列的BOTHRESH 和 BOQNAME属性。这样,你可以在例外处理中,利用MQINQ查询得到阈值的大小,如果超出,可以将消息转发到BOQNAME指定的队列中,继而对该队列进行相应的处理。这种方法大大增强了应用程序的灵活性。

6. 在使用MQOPEN, MQPUT 和 MQGET调用时,要使用FAIL_IF_ QUIESCING的选项。

MQ 系统本身和使用它提供的服务的用户应用程序之间是互相独立的,必要时,我们可能要停止MQ系统,这时,我们不但希望新的应用不能连接,并且希望所有已连接的应用能够立即停止。为了使所有的应用程序能够快速得知MQ系统正在停止的信号,在上述MQ API中,必须设置FAIL_IF_ QUIESCING的选项。

如果不设置FAIL_IF_ QUIESCING的选项,当MQ系统停止时,所有应用将继续运行,这样会影响MQ系统的停止,从而导致MQ停止需要很长时间,同时可能导致我们必须手工杀掉那些没有设置该选项的应用程序。

7. 消息描述符的不同字段的使用方法

在MQ 的消息描述符MQMD中包含了很多字段,这些字段大部分是一些保留字段,例如:MsgID表示消息的唯一标识,如果你不指定,MQ系统会为你自动产生一个,并保证其唯一性;PutAppType, PutAppName, PutDate, PutTime是系统自动产生的,表示哪个应用何时将消息发送到队列中;再如:GroupId, MsgSeqNumber, Offset, MsgFlags是与消息分段和消息分组相关的控制信息;除了这些系统自动产生无法更改的字段和有特殊用途的字段之外,如果您想选择某些字段为己所用,将其设定为自己应用程序中某个有意义的标识,你可以使用CorrelId和Feedback字段,但是,按照惯例,CorrelId常常被用于在请求/应答通讯模式中来表示请求消息和应答消息之间的关联;因此,我们可以灵活使用Feedback字段,利用该字段来进行一些应用程序控制。当我们接收到某个消息之后,我们可以检查Feedback字段,根据Feedback字段值进行相应的处理。

8. 消息永久性属性的确定

永久性消息保证了消息在系统和网络等故障下的安全可靠,但是同时从性能角度来讲会比非永久性消息要差,因此,要从不同的角度进行权衡和分析,然后决定消息的永久性属性。当对性能要求非常高,可靠性要求相对不高时,

本文来自: http://study.qqcf.com/web/82/10713.htm

3DGS 2025实战指南:从安装到训练全流程解析 本文提供了3D Gaussian Splatting (3DGS) 从零开始的完整实战指南。详细解析了使用gsplat库进行环境配置、依赖安装(包括pycolmap和fused-ssim)、数据准备与COLMAP处理、核心训练流程及参数调优,并探讨了2025年3DGS在动态场景、可控编辑等领域的最新进展,帮助开发者快速掌握这一前沿3D重建技术。 阅读详情

相关推荐

Linux系统搭建OpenClaw(原Clawdbot)全流程指南 最新版

工具定位:开源个人 AI 助手,支持文件读取、命令执行、多渠道交互(Telegram / 本地终端等);系统要求:主流 Linux 发行版(Ubuntu/Debian/CentOS 等),Node.js ≥22(核心依赖);安全提示:OpenClaw 为测试版,具备高权限操作能力,建议使用非主力机,配置权限白名单,避免接触敏感数据。

AI时代老码农的第二春 6559

MQ--API总结

研究MQ很长时间了, 每个类,方法,都查了很长时间,在此总结一下! Java编写访问MQ的程序  1、MQQueueManager―――队列管理器访问类  常用方法:  public MQQueueManager(String queueManagerName)―――建立一个管理器实例  创建队列管理器有两种方式: 1:绑定方式,这种方式要求MQ服务器与应用程序同属一台服务器,效率比较

申公的专栏 1万+

2021-8-14 EDK II编译

2021-8-14 EDK II 编译为什么要写这篇文章新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 为什么要写这篇文章 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdo

qq_45775660的博客 2946

RabbitMQ编程基本介绍

RabbitMQ使用管理和规范 简介 对比ActiveMQ(协议、使用场景) 概念模型 消息路由 ExchangeType direct fanout topic 使用规范 一、消息生产者 二、消息消费者 三、消息数据类型 四、可视化管理 开发指导 maven坐标 application.properties配置 消息生产者 消息消费者 自定义接口 其他配置项 注意点 问题排查指导 原生命令 rabbitMQ Management指导(推荐) 简介 RabbitMQ是开源的AMQP(高级消息队列协议)协议的

weixin_38446891的博客 1942

开发者的避坑指南:在Apple Silicon Mac上构建RocketMQ Python客户端的完整心路历程

本文详细记录了在Apple Silicon Mac上构建RocketMQ Python客户端的完整过程,重点解决了架构兼容性问题。通过源码编译rocketmq-client-cpp库,修复构建脚本和CMake配置,最终成功在M2芯片MacBook Pro上部署RocketMQ Python客户端,为开发者提供了实用的避坑指南。

Pepper的专栏 696

基于STM32平衡小车设计

随着智能硬件的发展,基于STM32的两轮智能平衡车作为一种新型的智能移动工具,具备较高的应用价值。本文旨在设计并实现一款基于STM32微控制器的智能平衡车系统,提升其稳定性和操控性,探索如何通过传感器数据和控制算法实现精确平衡控制。 本设计基于STM32微控制器,选择了STM32F103系列作为核心控制器,具有足够的处理能力和丰富的外设接口。系统通过MPU6050传感器获取三轴加速度和三轴陀螺仪数据,实现实时姿态检测。电机驱动部分采用合适的驱动模块,能够控制两个直流电机,并支持PWM调速。设计中还包括OL

m0_74026776的博客 2730

一个基于 Web 的 WebSphere MQ 监控工具

简介 IBM® WebSphere® MQ 缺乏一个良好的监控工具。本文将向您展示如何使用来自 mega.com 的一个简单的基于 Web 的 WebSphere MQ 监控工具。本文面向那些想利用监控工具特性的 WebSphere MQ 管理员和用户,这些监控工具特性包括 WebSphere MQ 系统运行状况的可视化和 WebSphere MQ 对象(包括队列、主题、通道、听众和队列管理器)

菜鸟的天空 8221

告别sgmediation!Stata中介效应分析新选择:mediation包完整操作指南

本文介绍了Stata中介效应分析从传统sgmediation命令向mediation包的范式升级。重点阐述了如何使用medeff和medsens命令进行更严谨的因果推断,并执行关键的敏感性分析,以评估结果对未观测混杂的稳健性,为学术研究提供发表级的分析工具。

redis7keeper的博客 1157

IBM MQ 学习(一)

import java.io.IOException; import java.util.HashMap; import java.util.Map; import com.ibm.mq.MQC; import com.ibm.mq.MQEnvironment; import com.ibm.mq.MQException; import com.ibm.mq.MQGetMessageOption...

785

一文理解近红外光谱数据建模步骤的细节(细节知识总结)

上一篇文章,向入门的同志大体介绍了近红外光谱数据建模的内容,依据上文其实已经可以基本完成数据建模的工作,但是很多工作不够细致,本文便是分享其中的一些技术细节。

weixin_46207310的博客 5567

AD9613操作控制

输出250M时钟给AD9613,过FPGA ILA逻辑分析仪将AD9613采集的两个通道ADC数据250M数据显示出来。其中AD9613输出的是LVDS数据,通过select IO核转为并行数据。 一,搜索IP核:selectIO interface wizad ,并双击配置 配置为input,DDR模式,数据位宽为12bit,IO类型为差分,这里配置的是12对数据差分对。然后配置外部差分时钟。 将tap setting 设置为13,将时钟的边沿对准数据的中间,以免数据出错 二,

wangjie36的博客 4047

MQ消息队列:异步处理的最佳实践

Message Queue,消息对列​消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。MQ的作用:服务之间数据交互时的一种方式。和Feign对比异步:实现服务之间异步通信削峰:MQ可以堆积消息,可以应对流量洪峰,实现流量的削峰填谷解耦:实现服务之间的耦合性降低ActiveMQRabbitMQRocketMQKafkaRabbitMQActiveMQ。

m0_60281842的博客 3612

DA14531之如何Debug(在线调试、Jlink仿真、串口打印)

在线调试和串口打印调试。在线调试是Keil软件配合Jlink编译、烧录、仿真为一体的,其操作包括:运行、停止、打断点,单步运行等。而串口打印调试,只需打开相关配置,让arch_printf()函数正常输出串口数据。若想在初始化完成后打印arch_printf(“goto Loop\r\n”);波特率为115200,接收到串口消息goto Loop。连好线后,点击仿真按钮,在线Jlink调试。

hejinwu1314的博客 1792

WebSphere MQ配置和编程最佳实践

Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE

黄镇红的专栏 2174

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

转帖:MQ设置和编程最佳实践

原网址:http://www.sudu.cn/info/html/edu/20070823/279996.html 第一部分:有关MQ对象设置的最佳实践 对于MQ系统设置,我们要规划MQ通讯网络,确定系统的拓扑结构,确定各种...

clugcpne10995的博客 243

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

优秀文章转载

Spring boot 运用策略模式实现,避免多次使用if - 掘金CTO:再写if-else,逮着罚款1000!得物自研API网关实践之路什么是 Nacos注册中心与配置中心简介_配置中心和注册中心区别-优快云博客必看!java后端,亮剑诛仙(最全知识点)非常哇塞的 Spring Boot 性能优化长文

qq_39763510的博客 626

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Websphere编程之路 《MQ编程 For Delphi》 --MQ编程初探

/*转载请保留版权:作者:雷霖 QQ:64607646 E-Mail:ralinlei@gmail.comBlog:blog.youkuaiyun.com/rubi*/1,            MQ编程概述IBM Websphere MQ编程主要有两部分:一是MQ系统管理编程;一是MQ应用开发编程。MQ系统管理编程:所谓的MQ系统管理编程是指使用MQ提供的编程接口,编制特定的

Rubi的专栏 7997

POSIX 消息队列函数(mq_open、mq_getattr、mq_send、mq_receive)示例

概述 消息队列是Linux IPC中很常用的一种通信方式,它通常用来在不同进程间发送特定格式的消息数据。 消息队列和之前讨论过的管道和FIFO有很大的区别,主要有以下两点: 一个进程向消息队列写入消息之前,并不需要某个进程在该队列上等待该消息的到达,而管道和FIFO是相反的,进程向其中写消息时,管道和FIFO必需已经打开来读,那么内核会产生SIGPIPE信号。 IPC的持续性不同。管道和FIFO...

mayue_web的博客 4万+

Websphere编程之路--MQ编程初探

IBM Websphere MQ 编程主要有两部分:一是 MQ 系统管理编程;一是 MQ 应用开发编程。 1  MQ 编程概述   IBM Websphere MQ 编程主要有两部分:一是 MQ 系统管理编程;一是 MQ 应用开发编程。 MQ 系统管理编程:   所谓的 MQ 系统管理编程是指使用 MQ 提供的编程接口,编制特定的应用程序,来进行对 MQ 各种对象的监控和管理,如:查询通道

dingwood的专栏 2701

进程间通信,消息队列编程和案例 mq_open mq_close mq_unlink mq_setattr mq_getattr mq_send mq_receive

是 POSIX 消息队列(POSIX message queues)中用于发送和接收消息的函数。POSIX 消息队列是一种进程间通信(IPC)机制,允许进程以消息的形式交换数据。哈哈哈哈,先了解一下函数,最后来个案例。

爱串门的小马驹博客 1682

MQ系统管理编程概述

2004 年 2 月 01 日 在广大用户使用MQ的过程中,大家比较常用而且比较熟悉的是有关MQI的编程,即利用MQ应用程序接口进行消息的发送和接收,而大家对MQ的系统管理编程可能比较陌生,希望得到更多这方面的知识和技巧,本文将向大家介绍该方面的编程内容和技巧。 在广大用户使用MQ的过程中,大家比较常用而且比较熟悉的是有关MQI的编程,即利用MQ应用程序接口进行消息的发送和接收,以C语言为例,最为...

wuyisky 1184

java mq编程_MQ java 基础编程

MQ java 基础编程编写人:邬文俊编写时间 : 2006-2-16联系邮件 : wenjunwu430@gmail.com前言通过 2 个多星期对 MQ 学习,在 partner 丁 & partner 武 的帮助下完成了该文档。该文档提供一个简单的例子,通过对该例子的讲解,你将知道:1. 用 java 写客户端从 MQ Server 收发消息。2. M...

weixin_33208553的博客 383
上一篇: 我做为程序员站长这样推广自己的网站
下一篇: 代理服务器列表(20100116)
冯立彬
冯立彬 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域
博客等级 码龄21年 5458粉丝 593原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值