gpt4 book ai didi

c# - WMQ : Distributing MQ readers over several machines

转载 作者:行者123 更新时间:2023-11-30 20:23:24 25 4
gpt4 key购买 nike

我正在使用 WMQ 访问大型机上的 IBM WebSphere MQ - 使用 C#。

我们正在考虑将我们的服务分散在多台机器上,然后我们需要确保两台不同机器上的两个服务不能同时读取/获取相同的 MQ 消息。

我获取消息的代码是这样的:

var connectionProperties = new Hashtable();

const string transport = MQC.TRANSPORT_MQSERIES_CLIENT;
connectionProperties.Add(MQC.TRANSPORT_PROPERTY, transport);
connectionProperties.Add(MQC.HOST_NAME_PROPERTY, mqServerIP);
connectionProperties.Add(MQC.PORT_PROPERTY, mqServerPort);
connectionProperties.Add(MQC.CHANNEL_PROPERTY, mqChannelName);

_mqManager = new MQQueueManager(mqManagerName, connectionProperties);

var queue = _mqManager.AccessQueue(_queueName, MQC.MQOO_INPUT_SHARED + MQC.MQOO_FAIL_IF_QUIESCING);
var queueMessage = new MQMessage {Format = MQC.MQFMT_STRING};
var queueGetMessageOptions = new MQGetMessageOptions {Options = MQC.MQGMO_WAIT, WaitInterval = 2000};
queue.Get(queueMessage, queueGetMessageOptions);

queue.Close();
_mqManager.Commit();
return queueMessage.ReadString(queueMessage.MessageLength);

默认情况下 WebSphere MQ 是事务性的,还是我需要更改我的配置才能启用它?

或者 - 我是否需要让我们的大型机人员施展魔法?

谢谢

最佳答案

除非您主动浏览该消息(即阅读它但不加锁地把它留在那里),否则只有一个 getter 能够“获取”该消息。即使没有事务性,MQ 仍然只会传递消息一次......但是一旦传递它就消失了

MQ 不是“默认”事务性的 - 如果您想要事务性(或与 .net 事务集成是另一种选择),您需要使用 GMO_SYNCPOINT(MQ 事务)并在连接(MQQueueManager 级别)提交

如果您使用同步点,那么一个 getter 将收到消息,另一个将忽略它,但如果您随后遇到问题并回滚,那么它可供任何 getter 使用(如您所愿)。在这种情况下,您可能会看到一条消息两次,但那是因为您中止了事务,因此要求将其恢复到获取之前的状态。

关于c# - WMQ : Distributing MQ readers over several machines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28988229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com