如何使用IBM MQ lib for .Net(IBM.WMQ),V8.0从客户端获取MQ环境的所有可用队列名称? 我编写了一个很好的.Net应用程序,用于读取和发送数据到MQ (similar founds at code project)。
有人知道是否有可能/如何动态地从IBM.WMQ .NET lib获取所有可用的队列名称,就像使用工具IBM测试工具RfhUtil.exe时那样,或者像runmqsc DISPLAY QUEUE那样来自IBM .Net lib的命令?
我试图浏览API,Reference manual和IBM programming guide但没有成功。
答案 0 :(得分:1)
MQ .NET中有一定程度的PCF支持,但它没有记录。以下是在队列管理器中显示队列名称的示例代码。
using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using IBM.WMQ;
using IBM.WMQ.PCF;
namespace PCFNET
{
class Program
{
static void Main(string[] args)
{
InquireQueue();
}
/// <summary>
/// Display list of queue names and queue depth for each queue
/// </summary>
public static void InquireQueue()
{
PCFMessageAgent messageAgent = null;
try
{
// Create bindings connection to queue manager
messageAgent = new PCFMessageAgent("DEMOQMGR");
// Build Inquire command to query queue name
PCFMessage reqeuestMessage = new PCFMessage(MQC.MQCMD_INQUIRE_Q);
reqeuestMessage.AddParameter(MQC.MQCA_Q_NAME, "*");
// Send request and receive response
PCFMessage[] pcfResponse = messageAgent.Send(reqeuestMessage);
// Process and print response.
int pcfResponseLen = pcfResponse.Length;
for (int pcfResponseIdx = 0; pcfResponseIdx < pcfResponseLen; pcfResponseIdx++)
{
try
{
String qName = pcfResponse[pcfResponseIdx].GetStringParameterValue(MQC.MQCA_Q_NAME);
int qDepth = pcfResponse[pcfResponseIdx].GetIntParameterValue(MQC.MQIA_CURRENT_Q_DEPTH);
Console.WriteLine("QName: " + qName + " Depth: " + qDepth);
}
catch (PCFException pcfex)
{
//Ignore exception and get the next response
}
}
}
catch (PCFException pcfEx)
{
Console.Write(pcfEx);
}
catch (MQException ex)
{
Console.Write(ex);
}
catch (Exception ex)
{
Console.Write(ex);
}
finally
{
if (messageAgent != null)
messageAgent.Disconnect();
}
}
}
}
答案 1 :(得分:0)
Java中有PCFMessageAgent
个类,我可以看到一些似乎在.NET API中引用了等价的类。
只要您有权访问SYSTEM.ADMIN.COMMAND.QUEUE
,就可以自己构建PCF消息。
您还需要根据SYSTEM.COMMAND.REPLY.MODEL
或SYSTEM.MQSC.REPLY.QUEUE
动态创建回复队列。