我读了这篇文章
并且仍然不理解主题如何在 MQ 中工作的概念。在 JMS 中,我知道您可以在主题上发布消息,并且为了从该主题接收消息,您首先需要订阅它(在接收阶段使用订阅名称)。
它在 MQ 中是如何工作的?我想写一个简单的场景(如在 JMS 中):
示例代码(.NET)会有所帮助
盖伊
我读了这篇文章
并且仍然不理解主题如何在 MQ 中工作的概念。在 JMS 中,我知道您可以在主题上发布消息,并且为了从该主题接收消息,您首先需要订阅它(在接收阶段使用订阅名称)。
它在 MQ 中是如何工作的?我想写一个简单的场景(如在 JMS 中):
示例代码(.NET)会有所帮助
盖伊
你看过包含的示例代码吗?在默认安装中,它位于:
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 代码。.Net 2.0.0的消息服务客户端手册描述了该产品:
.NET 的消息服务客户端 .NET
的消息服务客户端提供了一个称为 XMS 的应用程序编程接口 (API),它与 Java 消息服务 (JMS) API 具有相同的接口集。.NET 的消息服务客户端包含一个完全托管的 XMS 实现,它可以被任何 .NET 兼容的语言使用。XMS 支持:
XMS 应用程序可以与以下类型的应用程序交换消息:
XMS 应用程序可以连接到以下任何消息服务器并使用其资源:
通过连接到 WebSphere MQ 队列管理器,XMS 应用程序可以使用 WebSphere MQ Enterprise Transport 与 WebSphere Event Broker 或 WebSphere Message Broker 的代理进行通信。或者,XMS 应用程序可以使用 WebSphere MQ 发布/订阅代理。
如果您想进一步探索,示例 XMS 代码位于前面提到的本机 .Net 示例下方的子目录中。这些示例在手册的使用 XMS 示例应用程序部分中进行了描述。
从 v7 开始,.Net 支持已集成到 WMQ 中。如果您缺少示例,那么您的 WMQ 客户端安装是后级或未完全安装。适用于 Windows 的最新 v7.0 WMQ 客户端可作为SupportPac MQC7下载。
XMS 支持以SupportPac IA9H的形式提供。