2016-02-26 3 views
1

Я разрабатываю приложение, которое использовало JMS в качестве уровня обмена сообщениями. Я также использую glassfish для размещения jms/mq backend. Приложение может выполнять обмен сообщениями pub/sub с использованием фабрики подключений и темы на сервере Glassfish 3.1, который я изначально настроил. У меня теперь есть еще один экземпляр Glassfish (4.1), в котором размещается новый набор функциональных возможностей, который использует новый набор приложений, но мне все же нужно потреблять сообщения, транслируемые первым сервером Glassfish. Тот факт, что клиенты используют новые библиотеки, специфичные для glassfish 4.1, я не могу напрямую подключиться к серверу glassfish1.JMS-получение сообщений от удаленной Glassfish

Я следую этому руководству относительно многосерверных сред (https://docs.oracle.com/cd/E19798-01/821-1841/bncfp/index.html), а автономные java-клиенты используют фабрику соединений, настроенную на новом сервере Glassfish, для подключения к серверу старой стеклянной рыбы. Я знаю, что соединение делается потому, что если я перестану glassfish1, я получаю соединение упал ошибки и т.д.

Соответствующий код клиента выглядит следующим образом:

 System.setProperty("org.omg.CORBA.ORBInitialHost", "10.20.10.52"); 
     System.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); 
     try { 
      try { 
       ctx = new InitialContext(); 
     } catch (NamingException ex) { 
      ex.printStackTrace(); 
     } 
     ConnectionFactory cf = (ConnectionFactory) ctx.lookup("jms/ConnectionFactory"); 
     Connection connection = cf.createConnection(); 
     jmsContext = cf.createContext(Session.AUTO_ACKNOWLEDGE); 
     topic = (Topic) ctx.lookup("jms/Topic"); 
     updateShipperConsumer = jmsContext.createConsumer(topic); 
     jmsProducer = jmsContext.createProducer(); 

     logger.info("Started JMS successfully!"); 
    } catch (NamingException ex) { 
     ex.printStackTrace(); 
    } catch (JMSException ex) { 
     Logger.getLogger(LamtecJMSSystemImpl.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

ОМС/ConnectionFactory JNDI является локальное подключение завода на glassfish2, у которого свойство AddressList установлено на glassfish1: 7676. Существует соответствующая фабрика соединений на Glassfish1 с таким же названием, как это предлагается в учебнике. Глядя на файлы журнала imq на сервере glassfish1, я вижу, что соединение из glassfish2 сделано.
Я не уверен, что я должен делать поиск по теме jndi (который у меня локально, а также на удаленном сервере), но я не думаю, что это изменило ситуацию.

В соответствии с учебным пособием, на который я ссылался выше, я выполнил всю необходимую конфигурацию и код, но у меня все еще нет сообщений jms на моих клиентах. Любые идеи?

ответ

2

Я могу посоветовать о JMS-очередях, возможно, для тем похоже или же решение. Вы можете создавать очереди с одинаковыми именами на обоих серверах, и пусть первая очередь подталкивает свои сообщения ко второму, используя конфигурацию Glassfish, поэтому пусть брокеры imq выполняют эту работу. Настройте фабрику соединений jms на первом сервере с свойством «AddressList» со значением «mq: // host2: port2» с настройками второго брокера.

См шаблон GlassFish ресурсов для такой конфигурации в каталоге OSCM Service https://github.com/servicecatalog/development/blob/master/oscm-installation/domains/bes_domain/installer/resources-template.xml

Примером является соединение фабрики «JMS/ПБС/masterIndexerQueueFactory», которые вы можете найти в этом шаблоне.

Подробнее об объекте с открытым исходным кодом OSCM Cloud Service Management Software

Смежные вопросы