80 likes | 313 Views
MQ Misc. 设计消息. 消息类型 在应用程序中的消息是一个简单消息,还是一个请求消息。如果是请求消息,请求 - 回复的处理方式是异步还是同步。还有就是所有的消息是否在同一个工作单元。 消息优先级 在发送应用程序中可以为每个消息设置优先级再放到队列中。如果队列的消息交付方式也设置为优先级方式,则接收程序将总是先取出优先级最高的消息。如果队列的消息交付方式也设置为先进先出方式,则接收程序将按先进先出方式取出队列中的消息。 消息的永久性 当队列管理器重新启动,是否希望保留队列中的消息,如果需要保留,则把消息设置成永久性的,如果不需要保留,则把消息设置成非永久性的。.
E N D
设计消息 • 消息类型 • 在应用程序中的消息是一个简单消息,还是一个请求消息。如果是请求消息,请求-回复的处理方式是异步还是同步。还有就是所有的消息是否在同一个工作单元。 • 消息优先级 • 在发送应用程序中可以为每个消息设置优先级再放到队列中。如果队列的消息交付方式也设置为优先级方式,则接收程序将总是先取出优先级最高的消息。如果队列的消息交付方式也设置为先进先出方式,则接收程序将按先进先出方式取出队列中的消息。 • 消息的永久性 • 当队列管理器重新启动,是否希望保留队列中的消息,如果需要保留,则把消息设置成永久性的,如果不需要保留,则把消息设置成非永久性的。
WebSphere MQ 应用技术 • 等待消息 • 可以采用轮循机制从队列中取出消息或设置等待消息时间,如果消息到达则取出,否则超时则返回。 • 关联回复 • 把请求消息中的消息标识(MsgId)复制到回复消息的关联标识(CorrelID)中。 • 上下文信息(Context information) • 上下文信息对于安全,审计和问题确定是很有用。 • 自动启动WebSphere MQ应用程序 • WebSphere MQ触发机制,当消息到达队列时,自动启动应用程序处理消息。 • 产生消息报告 • 在应用程序可以请求产生多种报告消息,例如,意外报告(Exception reports)、失效报告(Expiry reports)、到达确认报告(Confirm-on-arrival reports)、交付确认报告(Confirm-on-delivery reports)、PAN报告(Positive action notification reports)和NAN报告(Negative action notification reports)等。 • 群集和消息的紧密联系 • 在WebSphere MQ群集里,消息可以被放到群集中任何队列管理器的相应队列,因此消息间的紧密联系可能被变得松散。
性能考虑 • 当处理一批消息时,可以采用MQCMIT函数,将若干消息作为一个完整的交易来处理,消息将作为一个batch统一提交,而不是一个个地分别提交,因此,可以提高性能。尤其对于永久性的消息效果更加明显。 • 尽量减小消息的大小,小消息的读取效率要高。对于mqget, mqput这两个函数而言,8k以下的消息的耗时差别不大,8k到128k的消息的耗时随着消息大小的增加而增加。大于128k的消息耗时较大,因为当与队列相关的内存满了的时候,会有硬盘交换。 • 同时要注意,从传输效率而言,如果在广域网上进行消息传输,消息太小会影响传输效率,因为对于每一消息,MQ都会有一个消息头,它会占有一定的字节数,如果把消息拆分太小,每个消息的传输头都会占据一定的开销。 • 如果消息不必可恢复,则在应用程序中可使用非永久性消息。 • 使用Distribution List 方式来把相同的消息发往不同的目的地。 • 用match correlation ID的方法取消息比不匹配性能要差。 • 通常,我们使用MQCONN这个函数建立与队列管理器的连接,除此之外,MQ支持trusted application binding,即fastpath binding,用MQCONNX来实现。当从性能方面考虑时,我们可以使用MQCONNX来提高性能。
MQI 的数据结构 • MQBO (开始选项) • 为MQBEGIN 调用确定选择项(仅适用于WebSphere MQ 版本5 产品)。 • MQCNO (连接选项) • 为MQCONNX 调用确定选择项(仅适用于WebSphere MQ 版本5 产品)。 • MQDH (分配标题) • 如果传输队列中的一条消息是分布列表消息,则描述该消息所包含的数据(仅适用于WebSphere MQ 版本5 产品和WebSphere MQ for AS/400)。 • MQGMO(获取消息选项) • 为MQGET 调用确定选择项。 • MQMD(消息描述器) • 为放入队列的(使用MQPUT 或MQPUT1)或从队列中获取的(使用MQGET)消息提供控制信息。
MQI 的数据结构 • MQMDE (消息描述器扩展) • 与MQMD 版本1 结合,它包含MQMD 版本2 通常采用的分组消息和分段信息(仅适用于WebSphere MQ 版本5 产品和WebSphere MQ for AS/400)。 • MQOD(对象描述器) • 确定采用MQOPEN 时要处理的对象。 • MQOR(对象记录) • 确定您在分布列表中要处理的目标(仅适用于WebSphere MQ 版本5 产品和WebSphere MQfor AS/400 V4R2)。 • MQPMO(放置消息选项) • 确定MQPUT 和MQPUT1 调用的选择项。 • MQPMR(放置消息记录) • 包含相关分布列表中个别目标的特定信息(仅适用于WebSphere MQ 版本5 产品和WebSphere MQ for AS/400 V4R2)。
其它结构 • MQDLH(死信标题) • 定义放入死信(未送达的消息)队列中消息标题的格式(WebSphere MQ for Windows V2.0不支持)。 • MQRMH (引用消息标题) • 定义引用消息的格式(仅适用于WebSphere MQ 版本5 产品和WebSphere MQ for AS/400)。 • MQTM(触发器消息) • 定义触发器消息格式。 • MQTMC (触发器消息) • 定义作为一组字符字段的触发器消息的格式(仅适用于WebSphere MQ for AS/400) • MQTMC2 (触发器消息) • 定义包括队列管理器名的触发器消息的格式(仅适用于WebSphere MQ for MVS/ESA,WebSphere MQ on UNIX systems,WebSphere MQ for OS/2 Warp 和WebSphere MQ for Windows NT) • MQXP(出口参数块)结构 • 用来与API 交叉出口进行通讯(仅适用于WebSphere MQ for MVS/ESA)。 • MQXQH(传输队列标题) • 定义放入传输队列中的添加至消息的标题格式。
C 和Visual Basic的基本数据类型 • MQBYTE 单字节数据 • MQBYTEn 16、24、32 或64 字节的字符串 • MQCHAR 单字节字符 • MQCHARn 包含4,8,12,16,20,28,32,48,64,128 或256 个单字节字符的字符串 • MQHCONN 连接句柄(此数据为32 位) • MQHOBJ 对象句柄(此数据为32 位) • MQLONG 32 位带符号二进制整数 • PMQLONG 指向MQLONG 类型数据的指针