基于Google的多项分析,我创建了一个基于Java的MQ JMS客户端。基本上,我是MQ的新手, 毫无疑问,我创建的代码是否可以在以下“请求和答复”中正常使用。
请求和回复消息:
REQUEST(SERVICE,10,CREATE_TEST,MSGID,15,FGD024049364194,TESTID,4,
USMQ,SRID,8,#MSTD,EMPID,5,8104,LOC,4,QR,AT-RP,4,QR,RTR,
7,2624931,UVT-ORD-SYS,4,CHAT,UVT-REQ,1,S,UVT-ORD,9,QT0046259,VTRD-2)RETURN();
REPLY(MSGID,15,FGD024049364194,DESTID,4,TRMQ,EMPID,5,8104,LOC,4,RTR,VTCT,0,
,UVT-DELCMNT,0,,UVT-DEL-REA,0,,UVT-DLVRY-FLG,1,N,UVT-DLVRY-STUS,1,
10,CREATE_TEST,TKT-NBR,7,2624931,USERID,8,#AMSATD)
MESSAGE(INFO,TEST-GROUP,5,PS,INFO,UVTTS,49,+00 INVALID/NORMAL,VICE,62,
00000 UPDATE SUCCESSFUL 3734931,INFO,STSUTITMEOUT,60,+0000 INVALID/OUT OF WORLD.);
我的要求是将上述请求消息存储在oracle数据库的表中,我想 从表中读取消息,然后将其放入与其他系统(第三方)进行交互的队列中。
另一个系统将如上所述答复消息,我需要将答复消息以及消息ID存储在同一读取表中。
请澄清我的疑问并纠正我在错误的情况下需要更改的代码:
1)在“请求”中有一个味精ID,并且在“答复”中也有消息ID。在我的情况下它将如何工作 我在某个网站上读到“就像为您自动生成了一个MessgeID,您无法更改该行为”。
所以在我的情况下,如下面的代码所示,将获得什么消息ID。是否正确?
2)当我阅读消息时,我是否会完整地完成上面的“答复”消息或仅答复中提到的消息。
请澄清我的上述疑问:
Write方法的代码:
public void write(List<Createbean> createbeanList) throws MQException
{
try {
MQQueueManager qMgr = new MQQueueManager(qManager, env);
// Set up the options on the queue we wish to open
int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;
// Now specify the queue that we wish to open and the open options
log.info("Accessing queue: "+qName);
MQQueue queue = qMgr.accessQueue(qName, openOptions);
// Define a simple WebSphere MQ Message ...
MQMessage msg = new MQMessage();
msg.format = MQC.MQFMT_STRING;
msg.format = MQC.MQFMT_STRING;
msg.feedback = MQC.MQFB_NONE;
msg.messageType = MQC.MQMT_DATAGRAM;
for (Createbean createBean : createbeanList) {
String createMessage =createBean.getMessage();
msg.writeString(createMessage);
}
// Specify the default put message options
MQPutMessageOptions pmo = new MQPutMessageOptions();
// Put the message to the queue
queue.put(msg, pmo);
// Close the queue
queue.close();
// Disconnect from the QueueManager
// logger.debug(CLASS, methodName, "Disconnecting from the Queue
// Manager");
qMgr.disconnect();
// logger.debug(CLASS, methodName, "Done!");
读取方法:
private void read() throws MQException
{
int openOptions = MQC.MQOO_FAIL_IF_QUIESCING | MQC.MQOO_INPUT_SHARED | MQC.MQOO_BROWSE;
MQQueue queue = _queueManager.accessQueue( inputQName,
openOptions,
null, // default q manager
null, // no dynamic q name
null ); // no alternate user id
log.info("MQRead v1.0 connected.\n");
int depth = queue.getCurrentDepth();
log.info("Current depth: " + depth + "\n");
if (depth == 0)
{
return;
}
MQGetMessageOptions getOptions = new MQGetMessageOptions();
//getOptions.options = MQC.MQGMO_NO_WAIT + MQC.MQGMO_FAIL_IF_QUIESCING + MQC.MQGMO_CONVERT;
getOptions.options=MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_FIRST;
getOptions.matchOptions=MQC.MQMO_NONE;
getOptions.waitInterval=5000;
long messageCount = 0;
boolean thereAreMessages=true;
while(thereAreMessages)
{
if(messageCount >0){
MQMessage message = new MQMessage();
try
{
message.messageId = MQC.MQMI_NONE;
queue.get(message, getOptions);
log.info(" MsgId : ");
String messageID= dumpHexId(message.messageId);
String msg = message.readString(message.getMessageLength());
log.info("Browsed message: " + msg);
log.info("Actually get message?");
byte[] b = new byte[message.getMessageLength()];
message.readFully(b);
createDAO rmdao = new createDAO();
rmdao.updateCreate(new String(b),messageID);
log.info(new String(b));
message.clearMessage();
/************************************************/
/* Reset the options to browse the next message */
/************************************************/
getOptions.options= MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_NEXT;
}
预先感谢