扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
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的选项。
7. 消息描述符的不同字段的使用方法
8. 消息永久性属性的确定
9. 当指定消息的永久性和非永久性属性时,最好利用应用程序显式地指定,不要使用"defined as queue"的方法来指定。
消息的永久性和非永久性是消息本身的属性,多数情况下,只有消息的原始发出者才了解丢失消息将产生的重大影响,因此,消息的原始发出者应在应用程序中显式地指定消息的永久性,如果将其定义为依赖于队列的该属性,就会比较被动,当队列的永久性属性(DEPSIST)被意外地设为NO时,就会有丢失的风险。
10. 应用程序可以将请求消息的永久性属性为No,即对于请求消息使用非永久性消息。
一般情况下,请求消息丢失对应用系统不会产生严重的影响,如果出现请求消息丢失的情况,我们可以重新发送,因此,不必将请求消息设置为永久性消息。把请求消息设置为非永久性消息的另外一个好处是,系统不需要对非永久性消息记录日志,从而减少I/O操作,提高系统的性能。
11. 在异种操作系统平台上使用MQ传输消息时,将消息格式设置为MQFMT_STRING。
MQ 的一大优势之一,是对built-in(内置的)消息格式,可以实现不同操作系统平台间、不同系统字符集之间的数据转换,如开发平台ASCII码和主机 EBCDIC码之间的转换。为了实现该数据转换,MQ必须获知本身和对方MQ系统的队列管理器的CCSID和Encoding以及消息的格式。一般而言, CCSID和Encoding会被自动设置和处理,不需要应用程序关心,但是,消息的格式必须由应用程序指定,对于MQ内置支持的消息格式,MQ可以自动转换,这些消息格式由MQFMT_*来指定。鉴于应用程序数据都可以用MQFMT_STRING来表示,并且MQFMT_STRING是MQ内置支持可以转换的格式之一,你可以使用它来表示你的消息格式,同时,对于数字型消息,你需要使用atoi, itoa等函数实现数字型和字符型之间的转换。
12. 对大消息的处理
MQ 支持单条消息的最大长度为100M,队列管理器、队列、通道支持的最大消息的缺省值为4M,即使如此,我们却应该根据不同的网络类型和带宽,具体地确定不同情况下单条消息的合适大小。例如:如果在拨号网络或网络带宽较窄的情况下,我们将单条消息的大小设置得太大,就会影响传输效率,在这种情况下,一定要使用MQ的分段功能将消息进行分段处理,确保每一个物理消息的大小适当,MQ会自动维护整个逻辑消息的完整性,并且可以在接收端一次性将其取出。
13. 如何使用MQ的请求/应答通讯模式来处理同步的消息处理模式。
大家知道,MQ的异步处理模式是非常强健的,同时它也支持同步的消息处理,例如MQ的client-server通讯就是一种典型的同步工作模式,对于 server-server通讯,我们也可以实现同步工作模式,这里就涉及到如何巧妙地使用MQ提供的消息生命周期的功能。这时,对于请求消息和应答消息我们最好为其设置生命周期。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者