【问题标题】:Writing to remote IBM MQ queue using XMS使用 XMS 写入远程 IBM MQ 队列
【发布时间】:2019-12-21 05:32:03
【问题描述】:

我正在尝试使用 XMS 版本 9.1 将消息放在 REMOTE 队列中。 MQ 服务器也升级到 9.1,但我的消息没有发送到远程服务器。

var cf = factoryFactory.CreateConnectionFactory();
cf.SetIntProperty(XMSC.WMQ_CONNECTION_MODE, XMSC.WMQ_CM_CLIENT);
cf.SetStringProperty(XMSC.WMQ_HOST_NAME, _host);
cf.SetIntProperty(XMSC.WMQ_PORT, _port);
cf.SetStringProperty(XMSC.WMQ_CHANNEL, _channel);
cf.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_OPTIONS, XMSC.WMQ_CLIENT_RECONNECT_Q_MGR);
cf.SetStringProperty(XMSC.WMQ_QUEUE_MANAGER, _managerName);

_connection = cf.CreateConnection();
_session = _connection.CreateSession(false, AcknowledgeMode.AutoAcknowledge);

用不同的方法...

var queue = _session.CreateQueue(queueName);
var producer = _session.CreateProducer(queue);

var msg = _session.CreateTextMessage(message);
producer.Send(msg);

我找不到很多例子。 producer 上是否有必须设置的属性才能写入远程队列?

提前致谢。

【问题讨论】:

  • 您收到什么错误?
  • 无。这是主要问题。我可以在 WireShark 中看到正在发送到服务器的消息。如果我手动将相同的消息放到队列中,它会发送到转发服务器。但是用代码把它们写在队列上就不行了。
  • 您是否使用 try/catch 来获取异常。例如,请参阅此示例:github.com/ibm-messaging/mq-dev-patterns/blob/master/dotnet/…
  • 您在代码中使用_connection.Start() 吗?
  • 两者都同意。我发现任何异常并开始连接。就像我上面提到的,我在 WireShark 中看到了发送到服务器 A 的消息。

标签: c# .net ibm-mq xms


【解决方案1】:

在我的情况下,解决方法是设置 WMQ_TARGET_CLIENT:

queue.SetIntProperty(XMSC.WMQ_TARGET_CLIENT, XMSC.WMQ_TARGET_DEST_MQ);

【讨论】:

  • 有趣的是,正在接收消息,它们只是有 RFH2 标头破坏了接收器。我想知道为什么在您使用的带有 v9.0 dll 的 XMS 上没有发送 RFH2 标头。我相信发送 RFH2 标头始终是默认设置,除非您务实地将其关闭,或者如果您有一个带有 PROPCTL(NONE) 的 QALIAS 指向您的 QREMOTE,或者 QLOCAL 在接收端将其设置为 NONE,或者 SDR 通道有 PROPCTL (无)。
  • 当您提到您连接的队列管理器也升级时,它真的是一个定义了类似对象的新队列管理器吗?如果升级了实际存在的 qmgr,则上述队列/通道属性不应丢失。
  • 不,它已升级。但我认为它以前可以工作,因为我们使用的是 MQ.net 客户端,而不是 XMS 客户端。我猜这个props.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED); 正确设置了标题?
  • 常规 .net API 不会在没有额外工作的情况下发送 RFH2 标头。 RFH2 标头是 JMS 和 XMS API 的默认标头。提供应用程序更改的详细信息以及如何有助于提供建议。
猜你喜欢
  • 2018-09-12
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多