- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我真的是 WebSphere MQ 的新手,但我有一个关于 MQMessage API 的问题。
看来MQMessage的接收者应该提前知道:
最佳答案
是的,您完全正确,如果消息是固定长度记录格式等结构化数据,则必须事先知道消息的格式才能对其进行解析。另一方面,如果消息有效负载是标记的数据结构(例如有效的 XML),那么您将使用正常解析来访问它。例如,您可能在不知道确切结构的情况下使用 XPath 访问 XML 有效负载。
您提到的方法(WriteInt、ReadInt 等)通常用于从已知格式中提取数据并将缓冲区指针前进到下一个字段。但是,也有读取和写入 UTF 字符串的方法。如果由于某种原因您的应用程序必须处理多种消息类型,那么您可以通过查询消息描述符来查询消息格式和消息类型。执行此操作的方法记录在 Message descriptor fields as properties 中。 .通过这种方式,您可以区分不同类型和格式的消息并适本地解析它们。
请注意,我上面链接的文档是 v7 .Net 类。由于 v6 的生命周期结束于 2011 年 9 月,因此希望新的开发都与 v7 类有关,并且最好连接到 v7 QMgr。
编辑 - 回复评论
检查消息格式的示例:
根据上面链接的页面,检查 C 头文件 cmqc.h 以获取 MQMD 中的字段。这将告诉您字段名称以及字段类型。在默认的 Windows 安装中,此文件位于C:\Program Files\IBM\WebSphere MQ\tools\c\include\cmqc.h
例如,message.getStringProperty('Root.MQMD.Format')
返回消息格式。在 cmqc.h 的顶部附近,您将找到一个名为 MQFMT_ 的宏列表,其中包含 MQMD 格式字段的可能值。从 v7.01 开始,它们看起来像这样:
/* Formats */
#define MQFMT_NONE " "
#define MQFMT_ADMIN "MQADMIN "
#define MQFMT_CHANNEL_COMPLETED "MQCHCOM "
#define MQFMT_CICS "MQCICS "
#define MQFMT_COMMAND_1 "MQCMD1 "
#define MQFMT_COMMAND_2 "MQCMD2 "
#define MQFMT_DEAD_LETTER_HEADER "MQDEAD "
#define MQFMT_DIST_HEADER "MQHDIST "
#define MQFMT_EMBEDDED_PCF "MQHEPCF "
#define MQFMT_EVENT "MQEVENT "
#define MQFMT_IMS "MQIMS "
#define MQFMT_IMS_VAR_STRING "MQIMSVS "
#define MQFMT_MD_EXTENSION "MQHMDE "
#define MQFMT_PCF "MQPCF "
#define MQFMT_REF_MSG_HEADER "MQHREF "
#define MQFMT_RF_HEADER "MQHRF "
#define MQFMT_RF_HEADER_1 "MQHRF "
#define MQFMT_RF_HEADER_2 "MQHRF2 "
#define MQFMT_STRING "MQSTR "
#define MQFMT_TRIGGER "MQTRIG "
#define MQFMT_WORK_INFO_HEADER "MQHWIH "
#define MQFMT_XMIT_Q_HEADER "MQXMIT "
/****************************************************************/
/* MQMD2 Structure -- Version-2 Message Descriptor */
/****************************************************************/
typedef struct tagMQMD2 MQMD2;
typedef MQMD2 MQPOINTER PMQMD2;
struct tagMQMD2 {
MQCHAR4 StrucId; /* Structure identifier */
MQLONG Version; /* Structure version number */
MQLONG Report; /* Report options */
MQLONG MsgType; /* Message type */
MQLONG Expiry; /* Expiry time */
MQLONG Feedback; /* Feedback or reason code */
MQLONG Encoding; /* Numeric encoding of message data */
MQLONG CodedCharSetId; /* Character set identifier of message
data */
MQCHAR8 Format; /* Format name of message data */
MQLONG Priority; /* Message priority */
MQLONG Persistence; /* Message persistence */
MQBYTE24 MsgId; /* Message identifier */
MQBYTE24 CorrelId; /* Correlation identifier */
MQLONG BackoutCount; /* Backout counter */
MQCHAR48 ReplyToQ; /* Name of reply-to queue */
MQCHAR48 ReplyToQMgr; /* Name of reply queue manager */
MQCHAR12 UserIdentifier; /* User identifier */
MQBYTE32 AccountingToken; /* Accounting token */
MQCHAR32 ApplIdentityData; /* Application data relating to
identity */
MQLONG PutApplType; /* Type of application that put the
message */
MQCHAR28 PutApplName; /* Name of application that put the
message */
MQCHAR8 PutDate; /* Date when message was put */
MQCHAR8 PutTime; /* Time when message was put */
MQCHAR4 ApplOriginData; /* Application data relating to
origin */
MQBYTE24 GroupId; /* Group identifier */
MQLONG MsgSeqNumber; /* Sequence number of logical message
within group */
MQLONG Offset; /* Offset of data in physical message
from start of logical message */
MQLONG MsgFlags; /* Message flags */
MQLONG OriginalLength; /* Length of original message */
};
关于.net - MQMessage 探索(使用 WebSphere MQ .NET API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4499856/
我得到了一个很棒的 ConsumerClass ,但 WebsphereMQClasses 却遇到了一个问题。它没有提供消息,而是显示 _Whole_thing (JMSMessage 类:jms_t
我们有 WebSphere MQ 服务器。我编写了 Java 客户端实用程序,它可以读取所有消息(将它们留在队列中)或从队列中删除所有消息。但是是否可以读取消息,如果它包含特定字符串 - 将其删除?
我想序列化 MQMessage 并将其保存到磁盘/数据库。我的目标是能够在以后反序列化它,并保持所有 header 、命名属性和内容完好无损。 为了清楚起见,我需要这样的东西: byte[] seri
我有这个永远监听消息的测试代码。如果它得到一个它打印出来。我想要做的是避免必须在每个 get() 之前构造一个 MQMessage 对象。我如何为多次调用 get() 重用 MQMessage? us
我对 MQMessage 代理还很陌生。在我的项目中,我想发送一条 xml 消息。一切正常,但是当消息大于 500 字节时,我的代码将损坏的消息发送到队列。我正在做的是 //queueManager
我有类似 MQ 消息的消息转发器/路由器之类的东西。我正在尝试根据某些规则转发消息。这种转发是通过从一个队列接收消息,创建一个新消息(具有相同或修改的内容)并将其放入另一个队列来完成的。转发器的存在应
我是 WebSphere MQ 的新手。我正在使用 IBM 的 .NET 类 (IBM.WMQ) 来放置请求消息,然后获取响应消息。 MQMessage 对象具有许多用于各种数据类型的 Writexx
我真的是 WebSphere MQ 的新手,但我有一个关于 MQMessage API 的问题。 看来MQMessage的接收者应该提前知道: 写入的消息类型(如果 WriteInt 然后 ReadI
我是一名优秀的程序员,十分优秀!