2013-06-24 2 views
6

У меня есть очередь JMS, настроенная на удаленном сервере из старинной рыбы. Я пытаюсь подключить эту очередь с моей локальной машины. Можно ли напрямую подключиться к этому серверу или мне нужно подключиться через какого-нибудь брокера/агента? Как это работает? (Я свежа в области JMS) Большое спасибоклиент для удаленной очереди JMS

ответ

10

Если ваше клиентское приложение работает за пределами Glassfish, это простой пример кода для открытого клиента mq.

Чтобы заставить его работать, вы должны ссылаться на 2 openmq банки из glassfishInstall/мэк/Lib каталога - imq.jar и jms.jar

import com.sun.messaging.ConnectionConfiguration; 
import com.sun.messaging.ConnectionFactory; 
import com.sun.messaging.Queue; 
import javax.jms.Connection; 
import javax.jms.JMSException; 
import javax.jms.Message; 
import javax.jms.MessageProducer; 
import javax.jms.Session; 

public class TestJmsClientStandalone2 { 

    public static void main(String[] args) throws JMSException 
    { 
     ConnectionFactory connFactory = new ConnectionFactory(); 
     connFactory.setProperty(ConnectionConfiguration.imqAddressList, "remotehostip:7676"); 

     Queue myQueue = new Queue("myRemoteQueue"); 

     try (Connection connection = connFactory.createConnection(); 
       Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
       MessageProducer producer = session.createProducer(myQueue)) { 

      Message message = session.createTextMessage("this is my test message"); 
      producer.send(message); 
     } 
    } 
} 
3

У меня нет опыта работы с Glassfish, но этот сценарий делает работу с JBoss (который объединяет JBossMQ), и она должна быть в целом применим также:

сервера :

  • конфигурация сервера: Создайте очередь, и связать его с именем, чтобы быть видимым в JNDI
  • конфигурации
  • сервера: Убедитесь, что соединение фабрики видна в JNDI, а

Клиент:

  • Lookup как фабрика соединений и очередь с помощью JNDI. Это может потребовать внесения некоторых значений в свойства для InitialContext
  • Наверху фабрики подключений и очереди вы можете создавать другие объекты (соединение/сеанс/приемник очереди).

Что касается JBoss это выглядит следующим образом:

final Properties initialContextProperties = new Properties(); 
    initialContextProperties.put("java.naming.factory.initial", 
      "org.jnp.interfaces.NamingContextFactory"); 
    initialContextProperties.put("java.naming.provider.url", 
      "jnp://localhost:1099"); 

    // 

    final InitialContext ic = new InitialContext(initialContextProperties); 

    final QueueConnectionFactory qcf = (QueueConnectionFactory) ic 
      .lookup("XAConnectionFactory"); 
    final Queue queue = (Queue) ic.lookup("queue/A"); 

Так брокер/агент, чтобы пройти через это JNDI.

5

Является ли ваше клиентское приложение запущенным в локальном экземпляре стеклянной рыбы и пытается подключиться к ресурсам JMS удаленного стакана?

Если да, то я нашел 2 способа сделать это. Для обеих опций устанавливаются одинаковые фабрики соединений и назначения (очереди) JMS Resources в удаленных и локальных экземплярах в стеклянном поле.

1) Установить соединение JMS фабрика свойство «Addresslist»

В клиентах GlassFish консоли администратора перейти к Resources->JMS Resources->Connection Factories->jms/YourConnectionFactory->Additional Properties

Добавить дополнительное свойство с именем Addresslist и значение XX.XX .XX.XX: YYYY где значение - это IP-адрес удаленной машины и номер порта, на котором запущена служба JMS.

или

2) Установите клиент GlassFish службы сообщений Java для подключения к удаленному GlassFish

В клиентов GlassFish консоли администратора перейдите к Configurations->server-config->Java Message Service Тип

  • Set JMS Service: REMOTE (щелкните Сохранить)
  • Установить JMS Hosts->default_JMS_host IP-адрес и порт, который должен быть IP-адресом и портом пульта дистанционного управления glassfish JMS service

Я тестировал оба варианта работы с Glassfish 4. Надеюсь, это поможет.