互联网服务mq 7.5

如何用C#读取JSM自动分组消息?

各位大牛好,
      初来乍到,还请多关注!
      最近公司用MQ做传输消息,有我来做这块,查询国内资料,少之又少,碰到一系列问题,如果有遇到的,还请指点:

问题:服务端放消息的是用Java放的,放到队列的是JMS消息,因为文件是自动分组消息,
所以客户端需要获取组Id(即GroupId)和消息序列号(即MessageId 或者是是Sequence),才能合并生成一个大文件,
有些属性用Java是能可以用的,但不幸的是,我们客户端用的C#,
获取的方式如下:
 var groupId = msg.GetStringProperty("JMSXGroupID");
                    var groupSeq = msg.GetIntProperty("JMSXGroupSeq");


这些是Java能获取到的,C#取到的groupId 是一串“0”,groupSeq永远是“1” C#获取不到这2个属性,
C#中可用如下方式:
var gid = Encoding.UTF8.GetString(msg.GroupId);
                    var messgaeid = Encoding.UTF8.GetString(msg.MessageId);

但是这2个获取到的值也是不对的,gid 和messgaeid 都是0,


请问大家有什么好的解决办法?
参与2

1同行回答

bisubisu售后技术支持SYNNEX
C#的资料确实非常少,mqseries.net有一个类似的例子,你看看有没有参考价值:  ///          /// Put the massages into the Queue          ///            &nbs...显示全部
C#的资料确实非常少,mqseries.net有一个类似的例子,你看看有没有参考价值:
  /// 
         /// Put the massages into the Queue 
         /// 
            mqPutMsgOpts = new MQPutMessageOptions(); 
            mqPutMsgOpts.Version = MQC.MQPMO_VERSION_2; 
            mqPutMsgOpts.Options = MQC.MQPMO_LOGICAL_ORDER | MQC.MQPMO_SYNCPOINT; 

            mqMsg = new MQMessage(); 
            mqMsg.WriteBytes(XML_message); 
            mqMsg.MessageId = MQC.MQMI_NONE; 
            mqMsg.CorrelationId = StrToByteArray("cor0"); 
            mqMsg.GroupId = MQC.MQGI_NONE; 

            mqMsg.Version = MQC.MQMD_VERSION_2; 
            mqMsg.MessageFlags = MQC.MQMF_MSG_IN_GROUP; 

            try 
            { 
                mqQueue.Put(mqMsg, mqPutMsgOpts); 
                mqQMgr.Commit(); 
            } 
            catch (MQException mqe) 
            { 
                LogAusgabe(String.Format("Beim Einreihen der Nachricht ist ein Fehler aufgetreten ({0})!", mqe.Message), 1); 
                return false; 
            } 

            mqMsg = new MQMessage(); 
            mqMsg.WriteBytes(BAL_message); 
            mqMsg.MessageId = MQC.MQMI_NONE; 
            mqMsg.CorrelationId = StrToByteArray("cor1"); 

            mqMsg.Version = MQC.MQMD_VERSION_2; 
            mqMsg.MessageFlags = MQC.MQMF_MSG_IN_GROUP; 

            try 
            { 
                mqQueue.Put(mqMsg, mqPutMsgOpts); 
                mqQMgr.Commit(); 
            } 
            catch (MQException mqe) 
            { 
                LogAusgabe(String.Format("Beim Einreihen der Nachricht ist ein Fehler aufgetreten ({0})!", mqe.Message), 1); 
                return false; 
            } 

            mqMsg = new MQMessage(); 
            mqMsg.WriteBytes(END_message); 
            mqMsg.MessageId = MQC.MQMI_NONE; 
            mqMsg.CorrelationId = StrToByteArray("cor2"); 

            mqMsg.Version = MQC.MQMD_VERSION_2; 
            mqMsg.MessageFlags = MQC.MQMF_MSG_IN_GROUP | MQC.MQMF_LAST_MSG_IN_GROUP; 

            try 
            { 
                mqQueue.Put(mqMsg, mqPutMsgOpts); 
                mqQMgr.Commit(); 
            } 
            catch (MQException mqe) 
            { 
                LogAusgabe(String.Format("Beim Einreihen der Nachricht ist ein Fehler aufgetreten ({0})!", mqe.Message), 1); 
                return false; 
            }
收起
IT咨询服务 · 2015-05-21
浏览848

提问者

flydraogn0815
软件开发工程师CMDI

问题状态

  • 发布时间:2015-05-20
  • 关注会员:1 人
  • 问题浏览:2547
  • 最近回答:2015-05-21
  • X社区推广