Приложение, в котором я работаю, должно связываться с сервером IBM MQ в удаленном месте. В настоящее время у нас есть рабочая система, использующая активный MQ, который использует брокера, и мост для подключения к удаленному серверу IBM MQ и работает нормально.Отсутствие ответа при использовании клиентских банков IBM MQ в приложении для подключения к серверу IBM MQ
Из-за какого-то нового усовершенствования мы теперь пытаемся добиться того же, используя клиентские банки IBM вместо Active MQ.
Проблема, с которой я столкнулась, заключается в том, что я могу подключиться к удаленному серверу inboundQ и отправлять сообщения. Но я всегда получаю нуль от исходящей очереди удаленных серверов. Но я не могу проверить, получены ли сообщения в удаленном месте. Но одно и то же сообщение при отправке через старую систему ActiveMQ получит ответ от удаленного сервера MQ.
Старый Active MQ внутренне использует мост для подключения к удаленному серверу IBM MQ, который настроен точно так же, как новый код, который я использую.
Я пробовал несколько кодов из Интернета и переполнения стека и всегда могу подключиться, но не получаю никаких ответов.
Кроме того, у меня нет ошибок и исключений при попытке отправить или получить удаленный IBM MQ.
Вставьте образец кода, который я пытаюсь получить на работу. Я изменил некоторые значения конфигурации в коде.
Мои сомнения следующие.
Все, что я делаю для этого копирования клиента банки IBM MQ в приложение и использовать код для отправки сообщений на удаленный MQ. Я еще не установил какое-либо другое приложение. Будет ли такая система работать или всегда должна быть какая-то промежуточная программа, например, активная MQ?
Тот же код может отправлять и получать с сервера IBM MQ, который я установил в нашей локальной сети, но не смог получить ответ с удаленного сервера? Это заставляет меня поверить, что я ничего не теряю в конфигурации? нужно ли что-либо еще настроить, кроме кода?
Я не вижу ошибок и исключений. Всегда отправляется сообщение, но ответ равен нулю. Я не видел использования имени пользователя-пароля или аутентификации с открытым ключом. Существует ли обычная проверка подлинности для проверки источника. ?
Я использую версию IBM MQ client 5.3, которая, как я знаю, является старой. Но использовали это, так как они работают с активной настройкой MQ, используют то же самое и работают правильно. У меня нет возможности узнать, какая версия на сервере IBM MQ присутствует на удаленной машине. Есть ли проблема, если мы используем другую версию клиента MQ, чем версия версии сервера MQ. ?
Пример кода, который работает для меня в местной среде, т.е. может посылать и получать от сервера IBM MQ я установил в другой машине в локальной сети. Тот же код будет получать нулевой ответ, когда я пытаюсь использовать его с удаленным сервером IBM MQ.
import javax.jms.*;
import javax.jms.JMSException;
import com.ibm.mq.jms.*;
import com.ibm.jms.JMSMessage;
import javax.jms.TextMessage;
public class SendReceive {
private MQQueueConnectionFactory connectionFactory;
private MQQueueConnection connection;
private void runTest() {
try {
connect();
connection.start();
MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue) session.createQueue("INBOUND_QUEUE"); /* values replaced with correct values in deployment server */
MQQueue queue2 = (MQQueue) session.createQueue("OUTBOUND_QUEUE"); /* values replaced with correct values in deployment server */
MQQueueSender sender = (MQQueueSender) session.createSender(queue);
MQQueueReceiver receiver = (MQQueueReceiver) session.createReceiver(queue2);
//TextMessage message = session.createTextMessage("yesyesyes");
String stt = "Test Message"; //
TextMessage message = session.createTextMessage(stt);
message.setJMSReplyTo(queue2);
sender.send(message);
System.out.println("Sent: " + message);
Message msg1 = receiver.receive(5000);
if(msg1!=null){
String responseMsg = ((TextMessage) msg1).getText();
System.out.println("Received: " + responseMsg);
}else{
System.out.println("Message received is null");
}
}catch(Exception e){
System.out.println("Exception caught in program : " + e);
e.printStackTrace();
}
}
public boolean connect() {
boolean connected = false;
try {
/* values below are replaced with correct values in deployment server */
connectionFactory = new MQQueueConnectionFactory();
connectionFactory.setPort(1515);
connectionFactory.setHostName("192.168.1.23"); //
connectionFactory.setQueueManager("QCCMGR");
connectionFactory.setChannel("QCHANNEL");
connectionFactory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
connection = (MQQueueConnection) connectionFactory.createQueueConnection();
connected = true;
} catch (Exception e) {
connected = false;
}
return connected;
}
public static void main(String[] args) {
new SendReceive().runTest();
}
}
@JoshMc Образец программы запускается на той же машине под тем же пользователем с аналогичными конфигурациями. Это не позволяет получить ошибку или исключение, когда я пытаюсь подключиться для отправки или получения. Удаленная система, по которой я отправляю сообщения, не принадлежит компании, над которой я работаю, поэтому у меня нет возможности проверить, получают ли они ее или нет. Но удаленный сервер дает ответ на отправку сообщений с моста activeMQ, который использует банку MQ5.3. Причина, по которой я использовал 5.3, - это только то, что использовала старая рабочая система. Я намерен попробовать более новую версию, но почему-то я чувствую, что мне не хватает какого-либо шага или конфигурации здесь. – Raj
@JoshMc. Также старая настройка моста activeMQ использует две программы для отправки и одну для приема. Если я отправлю, используя старую настройку моста MQ, я уверен, что сообщение дойдет до пульта. Я попытался отправить с использованием старой системы, а затем попытался получить ответ, используя мою примерную программу. Тогда также я получаю пустое или нулевое значение как ответ. Но если я запустил старый pgm для получения после этого, я получу ответ на отправленное сообщение, которое означает, что сообщение присутствует в удаленной очереди, но по какой-то причине не отправлено на мой образец pgm. Почему это происходит, я не могу понять. – Raj
Система @JoshMc использует 5 секунд. Я пробовал с 10,15,30 секунд, но все равно получаю только нуль в качестве ответа, поэтому я не думаю, что тайм-аут - это проблема.Я пробовал комментировать код для отправки части и работать только с получением части программы, но при этом нет ошибки при подключении, но ответ равен нулю. – Raj