Ibm mq 从多实例队列管理器获取活动QM实例并连接

Ibm mq 从多实例队列管理器获取活动QM实例并连接,ibm-mq,xms,Ibm Mq,Xms,在将队列管理器的单个实例更改为多实例队列管理器时,我很难为多实例队列管理器定义多个主机名。 现有主机在web.config中定义 <QueueConfigurationSection> <QueueConfiguration> <add name="SomeQueueHandler" queueManager="QM1" host="99.99.99.01" port="12345" requestQueue="A.B.REQUEST" se

在将队列管理器的单个实例更改为多实例队列管理器时,我很难为多实例队列管理器定义多个主机名。 现有主机在web.config中定义

<QueueConfigurationSection>
    <QueueConfiguration>
        <add name="SomeQueueHandler" queueManager="QM1" host="99.99.99.01" port="12345" requestQueue="A.B.REQUEST" service="FLATFILE" responseQueue="B.A.RESPONSE" internalResponseQueue="B.A.INTERNAL" channel="A.SVC.SVRCONN" binding="SOAP11TcpBinding" endPoint="net.tcp://localhost:808/Bus/SomeServiceBus.svc/SOAP11" />
    </QueueConfiguration>
  </QueueConfigurationSection>

那么如何在MQEnvironment.Hostname中设置备用主机呢

有多种方法为MQ提供多个主机名和要连接的端口号。下面我的建议指定的设置与您已经指定的主机和端口类似


对于正在使用XMS的
QueueHandler
,您将使用以下三个属性替换属性
XMSC.WMQ\u HOST\u NAME
XMSC.WMQ\u PORT
。下面的示例假设您已在web.config中定义了host1、port1、host2和port2:

connectionProperties.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_OPTIONS, XMSC.WMQ_CLIENT_RECONNECT_Q_MGR);
connectionProperties.SetStringProperty(XMSC.WMQ_CONNECTION_NAME_LIST, String.Format("{0}({1}),{2}({3})", element.Host1, element.Port1, element.Host2, element.Port2));
connectionProperties.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT, XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT_DEFAULT);
properties = new Hashtable();
properties.Add(MQC.CONNECTION_NAME_PROPERTY, String.Format("{0}({1}),{2}({3})", host1, port1, host2, port2));
properties.Add(MQC.CHANNEL_PROPERTY, channel);
properties.Add(MQC.CONNECT_OPTIONS_PROPERTY, MQC.MQCNO_RECONNECT_Q_MGR);
hMgr = new MQQueueManager(manager, properties);
指向这些属性的IBM MQ知识中心页面的链接:

在IBM安装目录下,您可以查看以下XMS示例程序:

tools\dotnet\samples\cs\xms\simple\wmq\SimpleClientAutoReconnect\SimpleClientAutoReconnect.cs
tools\dotnet\samples\cs\base\SimpleClientAutoReconnectPut\SimpleClientAutoReconnectPut.cs

对于使用IBM MQ C#库编写的
SendNewMessage
方法,您将使用属性的
Hashtable
替换
MQEnvironment
设置,并更改调用
MQQueueManager
以传递
Hashtable
的方式。这还有一个额外的好处,即在
MQEnvironment
不安全的情况下是线程安全的。下面的示例假设您已在web.config中定义了host1、port1、host2和port2:

connectionProperties.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_OPTIONS, XMSC.WMQ_CLIENT_RECONNECT_Q_MGR);
connectionProperties.SetStringProperty(XMSC.WMQ_CONNECTION_NAME_LIST, String.Format("{0}({1}),{2}({3})", element.Host1, element.Port1, element.Host2, element.Port2));
connectionProperties.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT, XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT_DEFAULT);
properties = new Hashtable();
properties.Add(MQC.CONNECTION_NAME_PROPERTY, String.Format("{0}({1}),{2}({3})", host1, port1, host2, port2));
properties.Add(MQC.CHANNEL_PROPERTY, channel);
properties.Add(MQC.CONNECT_OPTIONS_PROPERTY, MQC.MQCNO_RECONNECT_Q_MGR);
hMgr = new MQQueueManager(manager, properties);
IBM MQ KnowlEdge center页面“”包含有关属性的详细信息

在IBM安装目录下,您可以查看以下C#示例程序:

tools\dotnet\samples\cs\xms\simple\wmq\SimpleClientAutoReconnect\SimpleClientAutoReconnect.cs
tools\dotnet\samples\cs\base\SimpleClientAutoReconnectPut\SimpleClientAutoReconnectPut.cs

有多种方法为MQ提供多个主机名和要连接的端口号。下面我的建议指定的设置与您已经指定的主机和端口类似


对于正在使用XMS的
QueueHandler
,您将使用以下三个属性替换属性
XMSC.WMQ\u HOST\u NAME
XMSC.WMQ\u PORT
。下面的示例假设您已在web.config中定义了host1、port1、host2和port2:

connectionProperties.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_OPTIONS, XMSC.WMQ_CLIENT_RECONNECT_Q_MGR);
connectionProperties.SetStringProperty(XMSC.WMQ_CONNECTION_NAME_LIST, String.Format("{0}({1}),{2}({3})", element.Host1, element.Port1, element.Host2, element.Port2));
connectionProperties.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT, XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT_DEFAULT);
properties = new Hashtable();
properties.Add(MQC.CONNECTION_NAME_PROPERTY, String.Format("{0}({1}),{2}({3})", host1, port1, host2, port2));
properties.Add(MQC.CHANNEL_PROPERTY, channel);
properties.Add(MQC.CONNECT_OPTIONS_PROPERTY, MQC.MQCNO_RECONNECT_Q_MGR);
hMgr = new MQQueueManager(manager, properties);
指向这些属性的IBM MQ知识中心页面的链接:

在IBM安装目录下,您可以查看以下XMS示例程序:

tools\dotnet\samples\cs\xms\simple\wmq\SimpleClientAutoReconnect\SimpleClientAutoReconnect.cs
tools\dotnet\samples\cs\base\SimpleClientAutoReconnectPut\SimpleClientAutoReconnectPut.cs

对于使用IBM MQ C#库编写的
SendNewMessage
方法,您将使用属性的
Hashtable
替换
MQEnvironment
设置,并更改调用
MQQueueManager
以传递
Hashtable
的方式。这还有一个额外的好处,即在
MQEnvironment
不安全的情况下是线程安全的。下面的示例假设您已在web.config中定义了host1、port1、host2和port2:

connectionProperties.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_OPTIONS, XMSC.WMQ_CLIENT_RECONNECT_Q_MGR);
connectionProperties.SetStringProperty(XMSC.WMQ_CONNECTION_NAME_LIST, String.Format("{0}({1}),{2}({3})", element.Host1, element.Port1, element.Host2, element.Port2));
connectionProperties.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT, XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT_DEFAULT);
properties = new Hashtable();
properties.Add(MQC.CONNECTION_NAME_PROPERTY, String.Format("{0}({1}),{2}({3})", host1, port1, host2, port2));
properties.Add(MQC.CHANNEL_PROPERTY, channel);
properties.Add(MQC.CONNECT_OPTIONS_PROPERTY, MQC.MQCNO_RECONNECT_Q_MGR);
hMgr = new MQQueueManager(manager, properties);
IBM MQ KnowlEdge center页面“”包含有关属性的详细信息

在IBM安装目录下,您可以查看以下C#示例程序:

tools\dotnet\samples\cs\xms\simple\wmq\SimpleClientAutoReconnect\SimpleClientAutoReconnect.cs
tools\dotnet\samples\cs\base\SimpleClientAutoReconnectPut\SimpleClientAutoReconnectPut.cs

请看。如果你喜欢它,请接受它和/或投赞成票。很高兴能帮上忙。还是不起作用。。。当我使用连接属性创建这样的连接时:connectionWMQ=cf.CreateConnection();sessionWMQ=connectionWMQ.CreateSession(false,AcknowledgeMode.AutoAcknowledge);destination=sessionWMQ.CreateQueue(destinationName);producer=sessionWMQ.CreateProducer(目的地);它抛出异常:。。。接下来,XMS尝试执行MQPUT或MQPUT1;但是,WebSphere MQ报告了一个错误。使用链接异常确定此错误的原因。堆栈跟踪:在IBM.XMS.Client.WMQ.ProducerShadow.CheckNmqiCallSuccess(String messageid,WmqDestination destination,String probeid,Int32 cc,Int32 rc)上,从“sessionWMQ.CreateProducer(destination)”我可以看到XMSC_WMQ_连接_NAME_列表:主机名1(11111),主机名2(11111)。但是,它也显示“XMSC_WMQ_主机名:localhost”和“XMSC_WMQ_端口:1414”。这就是它试图连接并引发异常的原因吗?@Leo请单击问题下方的“编辑”并添加详细信息。评论的格式不好,所以很难阅读。请参阅。如果你喜欢它,请接受它和/或投赞成票。很高兴能帮上忙。还是不起作用。。。当我使用连接属性创建这样的连接时:connectionWMQ=cf.CreateConnection();sessionWMQ=connectionWMQ.CreateSession(false,AcknowledgeMode.AutoAcknowledge);destination=sessionWMQ.CreateQueue(destinationName);producer=sessionWMQ.CreateProducer(目的地);它抛出异常:。。。接下来,XMS尝试执行MQPUT或MQPUT1;但是,WebSphere MQ报告了一个错误。使用链接异常确定此错误的原因。堆栈跟踪:在IBM.XMS.Client.WMQ.ProducerShadow.CheckNmqiCallSuccess(String messageid,WmqDestination destination,String probeid,Int32 cc,Int32 rc)上,从“sessionWMQ.CreateProducer(destination)”我可以看到XMSC_WMQ_连接_NAME_列表:主机名1(11111),主机名2(11111)。但是,它也显示“XMSC_WMQ_主机名:localhost”和“XMSC_WMQ_端口:1414”。这就是它试图连接并引发异常的原因吗?@Leo请单击问题下方的“编辑”并添加详细信息。评论的格式不好,所以很难阅读。