клиент для удаленной очереди JMS

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

3 ответов


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

чтобы заставить его работать, вам нужно будет ссылаться на 2 банки openmq из каталога glassfishInstall/mq/lib - imq.jar и jms.Джар

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);
        }
    }
}

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

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

1) установите свойство фабрики соединений jms "addressList"

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

добавить дополнительное свойство с именем addressList и значение XX.XX.XX.XX: ГГГГ где значение-IP-адрес удаленного компьютера и номер порта, на котором работает служба JMS.

или

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

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

  • установить JMS Тип сервиса: удаленный (нажмите кнопку Сохранить)
  • установить JMS Hosts->default_JMS_host IP-адрес и порт, чтобы быть IP-адрес и порт удаленного glassfish службы JMS

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


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

сервер:

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

клиент:

  • поиск и заводские соединения и очередь с использованием 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.