Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74247
  • 博文数量: 28
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 291
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-29 14:47
文章存档

2014年(13)

2013年(15)

我的朋友

分类: Delphi

2014-03-31 15:37:12

amqsget 队列名称 队列管理器
这几天解决仿真连接mq的问题。一直报2058的错误。
一连搞了几天,才明白。mq分为server和client。
delphi调用的时候server调用mqm.dll,client调用mqic32.dll.
如果是仿真连接mq在本地,模拟服务端,那么需要调用mqm.dll,只需要制定队列管理器名称和队列名称。
如果模拟客户端,需要IP和端口,还有消息通道。
连接实例:

procedure TForm1.Button1Click(Sender: TObject);
var
  CompCode, Reason: MQLONG;
  QueueMgr: MQCHAR48;
  MQmessage: string;
  putBuffer: Pchar;
  bufLen: MQLONG;
  DataLen,getBufLen: MQLONG;
  ConnectOpts:MQCNO;
begin
  // 1. connect queueManage
  QueueMgr:= 'BATMAN';   // queueManage name
  ConnectOpts:= MQCNO_DEFAULT;

   MQCONN(@QueueMgr, @HConn, @CompCode, @Reason);
 // MQCONNX(@QueueMgr,@ConnectOpts,@HConn, @CompCode,@Reason);
  if CompCode = MQCC_FAILED then
  begin
    memo1.Lines.Add('connect MQ server error !! Reason ' + inttostr(Reason));
    exit;
  end;

  // 2. open queue
  _od:= MQOD_DEFAULT;
  _od.ObjectName:= 'TestQueue';    // queue name
  O_options := MQOO_INPUT_AS_Q_DEF + MQOO_OUTPUT + MQOO_FAIL_IF_QUIESCING;
  MQOPEN(Hconn, @_od, O_options, @Hobj, @CompCode, @Reason);
  if CompCode = MQCC_FAILED then
  begin
    memo1.Lines.Add('open queue error !! Reason ' + inttostr(Reason));
    exit;
  end;

  // 3. put message
  MQmessage:= 'hello,delphi for MQ';
  putBuffer:= Pchar(MQmessage);
  bufLen:= length(MQmessage);
  MsgDesc:= MQMD_Default;
  PutMsgOptions:=MQPMO_DeFAULT;
  MQPUT(Hconn,Hobj,@MsgDesc,@PutMsgOptions,bufLen,putBuffer,@Compcode,@Reason);
  if CompCode = MQCC_FAILED then
    memo1.Lines.Add('Put MQMessage error !! Reason ' + inttostr(Reason));

  // 4. get message
 { MsgDesc:= MQMD_Default;
  GetMsgOptions:= MQGMO_DeFAULT;
  GetMsgOptions.Options := MQGMO_WAIT+ MQGMO_CONVERT;
  GetMsgOptions.WaitInterval := 200;
  getBufLen:= Sizeof(buffer)-1;
  MQGET(Hconn,Hobj,@MsgDesc,@GetMsgOptions,getBufLen,buffer,@DataLen,@CompCode,@Reason);
  if CompCode = MQCC_FAILED then
    memo1.Lines.Add('Get MQMessage error !! Reason ' + inttostr(Reason))
  else
    memo1.Lines.Add(buffer);

  // 5. close queue
  MQCLOSE(Hconn, @Hobj, 0, @CompCode, @Reason);
  if CompCode = MQCC_FAILED then
    memo1.Lines.Add('close queue error !! Reason ' + inttostr(Reason));

  // 6. disconnect queueManage
  MQDISC(@Hconn, @CompCode, @Reason);
  if CompCode = MQCC_FAILED then
    memo1.Lines.Add('disconnect queueManage error !! Reason ' + inttostr(Reason)); }
end;


阅读(2331) | 评论(0) | 转发(0) |
0

上一篇:基础

下一篇:无法打开openssl/rsa.h

给主人留下些什么吧!~~