Настройка Multi Instance MQ
0 Somnath Musib [2014-11-14 16:33:00]
Я пытаюсь настроить Multi Instance MQ. Я настроил NFS и смог увидеть активные и стоящие экземпляры с помощью dspmq -x
. Однако я сомневаюсь, что после этой установки, как продолжить.
-
Как настроить каналы (каналы). Я должен использовать свойство
CONNAME
для этого. например,CONNAME(<ip><port>,<ip><port>)
. Я не знаю, как это сделать. -
Сколько слушателей мне нужно начинать.
Для нормального режима MQ я выполняю следующие шаги:
1. crtmqm QM
2. strmqm QM
3. runmqsc QM
4. runmqlsr -m QM -t tcp -p 1125
5. runmqsc QM
6. define channel(SYSTEM.ADMIN.SVRCONN) chltype(SVRCONN) mcauser('mqm')
Для многоэкземпляра MQ, какие изменения я должен выполнить для следующих шагов. Есть много хороших документов, доступных для Multi Instance MQ, но большинство из них ограничено тем, как настроить диспетчер очереди с помощью multi-instance. Мог бы кто-нибудь, пожалуйста, направить меня на оставшиеся шаги.
Любое руководство очень ценится.
РЕДАКТИРОВАТЬ
Спасибо Шаши и Морагу за руководство.
Я создал разные слушатели на порту 1600 на обоих серверах. Я создал канал ниже:
DEFINE CHANNEL (MYCHANNEL) CHLTYPE (CLNTCONN) TRPTYPE (TCP) CONNAME ('IP11600), IP2 (1600)')
DEFINE CHANNEL (MYCHANNEL) CHLTYPE (SVRCONN) TRPTYPE (TCP) MCAUSER ('')
Ниже приведен отдельный java-код, который я использую для размещения сообщения в очереди.
public class MutilInstanceMq
{
public static void main(String[] args)
{
sendMsg("Test Message");
}
public static void sendMsg(String msg)
{
MQQueueConnectionFactory connectionFactory = null;
QueueConnection queueConn = null;
QueueSession queueSession = null;
QueueSender queueSender = null;
TextMessage message = null;
try
{
connectionFactory = new MQQueueConnectionFactory();
connectionFactory.setConnectionNameList("<IP1>(1600), <IP2>(1600)");
connectionFactory.setTransportType(WMQConstants.WMQ_CM_CLIENT);
connectionFactory.setQueueManager("MYQM1");
connectionFactory.setChannel("MYCHANNEL");
queueConn = connectionFactory.createQueueConnection(" ","password");
queueSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
queueSender = queueSession.createSender(queueSession.createQueue("MYQ"));
queueSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
message = queueSession.createTextMessage(msg);
message.setJMSCorrelationID("12345");
queueSender.send(message);
queueConn.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
С приведенным выше кодом я получаю исключение при создании соединения.
> com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: Failed to
> connect to queue manager 'MYQM1' with connection mode 'Client' and
> host name 'IP1(1600),IP2(1600)'. Check the queue manager is
> started and if running in client mode, check there is a listener
> running. Please see the linked exception for more information.
Детальная трассировка стека стека:
com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: Failed to connect to queue manager 'MYQM1' with connection mode 'Client' and host name 'IP1(1600),IP2(1600)'. Check the queue manager is started and if running in client mode, check there is a listener running. Please see the linked exception for more information.
at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:608)
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:236)
at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:440)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:7062)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:6453)
at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:295)
at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6230)
at com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection(MQQueueConnectionFactory.java:144)
at MutilInstanceMq.sendMsg(MutilInstanceMq.java:40)
at MutilInstanceMq.main(MutilInstanceMq.java:17)
Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2543' ('MQRC_STANDBY_Q_MGR').
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:223)
... 8 more
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2543;AMQ9204: Connection to host 'IP2(1600)' rejected. [1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2543;AMQ9487: Remote queue manager is a standby queue manager instance. [3=MYCHANNEL]],3=IP2(1600),5=RemoteConnection.analyseErrorSegment]
at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:2010)
at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:1227)
at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:355)
... 7 more
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2059;AMQ9204: Connection to host 'IP1(1600)' rejected. [3=IP1(1600)]
at com.ibm.mq.jmqi.remote.internal.RemoteFAP.jmqiConnect(RemoteFAP.java:1980)
... 9 more
Где я ошибаюсь? Тем временем я отключил аутентификацию канала и смог подключиться к очереди.
ibm-mq
2 ответа
1 Решение Morag Hughson [2014-11-14 19:33:00]
Чтобы ответить на ваши явные вопросы:
- Если вы хотите использовать метод
CONNAME
разделенныйCONNAME
, вы получите что-то вроде этого.CONNAME('machine1(1234),machine2(1234)')
. У вас должен быть одинаковый номер порта в обоих. - У вас есть два варианта. Либо используйте runmqlsr на каждой машине, так что у вас есть два прослушивателя на одном и том же порту. Цель одного на основной машине - подключение для подключения к диспетчеру очереди. Назначение устройства на резервном компьютере - отклонять соединения, которые пытаются подключиться к ним быстрее, чем они могут быть отклонены TCP, что нет слушателя. Это также означает, что ошибка, сообщаемая соединением по причине невозможности подключения, гораздо более ясна: "Этот компьютер является резервным", а не "нет прослушивателя TCP здесь". Альтернативный вариант состоит в том, чтобы определить объект
LISTENER
и управлять им менеджером очереди, таким образом он будет работать только там, где запускается диспетчер очереди. Это сохраняет конфигурацию в диспетчере очередей, но это означает, что вы не получаете преимущества, описанные выше.
2 Shashi [2014-11-14 17:21:00]
Этапы хорошо описаны в Центре знаний здесь: http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.1.0/com.ibm.mq.doc/fa70161_.htm?lang=en. Как проверить настройку нескольких экземпляров, описано здесь: http://www-01.ibm.com/support/knowledgecenter/SSFKSJ_7.1.0/com.ibm.mq.doc/fa70163_.htm?lang=en.