我读了这个article
仍然不理解主题如何在MQ中运行的概念。 在JMS中,我知道您可以在主题上发布消息,并且为了从它接收消息,您首先需要订阅它(在接收阶段使用订阅名称)。
它在MQ中如何工作?我想写一个简单的场景(如在JMS中):
示例代码(.NET)会很有帮助
盖
答案 0 :(得分:7)
你看过包含的示例代码了吗?在默认安装中,它位于:
C:\Program Files\IBM\WebSphere MQ\tools\dotnet\samples
MQPubSubSample.cs
程序说明了托管代码和非托管代码的持久订阅和非持久订阅。在每种情况下,它首先订阅,然后发布,但您可以轻松地将其修改为您的问题中描述的发布/订阅/接收/发布/接收的用例。 (但是,您将无法从尚未订阅的主题中接收。)
以下是示例代码中的一个部分:
// Managed/nondurable
string topicName = DEFAULT_TOPIC_STRING;
string topicObject = null;
int openOptionsForGet = MQC.MQSO_CREATE | MQC.MQSO_FAIL_IF_QUIESCING | MQC.MQSO_MANAGED | MQC.MQSO_NON_DURABLE;
int destType = MQC.MQOT_TOPIC;
try
{
destForGet = mqQMgr.AccessTopic(topicName, topicObject, MQC.MQTOPIC_OPEN_AS_SUBSCRIPTION, openOptionsForGet);
messageForPut = new MQMessage();
messageForPut.WriteString(DEFAULT_MESSAGE_DATA);
mqQMgr.Put(destType, topicObject, null, topicName, messageForPut);
messageForGet = new MQMessage();
destForGet.Get(messageForGet);
string messageDataFromGet = messageForGet.ReadLine();
if(!DEFAULT_MESSAGE_DATA.Equals(messageDataFromGet))
Console.WriteLine("Incorrect Message Received.");
destForGet.Close();
}
catch(MQException mqE)
{
Console.WriteLine("MQException caught. " + mqE.ToString());
}
您的问题以JMS为例。请注意,您可以选择使用IBM XMS - .Net的可扩展消息服务客户端。 XMS通过.Net实现JMS API,WMQ,WMB或WAS作为传输,因此您只需很少的修改就可以使用JMS代码。 Message Service Client for .Net 2.0.0手册describes the offering:
.NET的消息服务客户端
Message Service Client for .NET提供了一个名为XMS的应用程序编程接口(API),它具有与Java消息服务(JMS)API相同的接口集。 Message Service Client for .NET包含一个完全托管的XMS实现,可以被任何.NET兼容语言使用。
XMS支持:
XMS应用程序可以使用以下类型的应用程序交换消息:
XMS应用程序可以连接并使用以下任何消息传递服务器的资源:
通过连接到WebSphere MQ队列管理器,XMS应用程序可以使用WebSphere MQ Enterprise Transport与WebSphere Event Broker或WebSphere Message Broker的代理进行通信。或者,XMS应用程序可以使用WebSphere MQ发布/预订代理。
如果您希望进一步探索,示例XMS代码驻留在前面提到的本机.Net示例下面的子目录中。样本在手册的Using the XMS Sample Applications部分进行了描述。
从v7开始,.Net支持已集成到WMQ中。如果您缺少样本,那么您的WMQ客户端安装是后台安装或未完全安装。最新的v7.0 WMQ Client for Windows可以下载为SupportPac MQC7。
XMS支持以SupportPac IA9H提供。