cliente para fila JMS remota

Eu tenho uma fila JMS configurada no servidor glassfish remoto. Estou tentando conectar essa fila da minha máquina local. É possível conectar-se diretamente a este servidor ou preciso conectar-me através de algum agente / corretor? Como funciona? (Eu sou fresco na área de jms) Muito obrigado

Se seu aplicativo cliente estiver sendo executado fora do Glassfish, aqui está um exemplo de código simples para um cliente mq aberto.

Para fazê-lo funcionar, você precisará referenciar 2 jars do openmq a partir do diretório glassfishInstall / mq / lib – imq.jar e 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); } } } 

O seu aplicativo cliente está sendo executado em uma instância local do glassfish e está tentando se conectar aos resources JMS da instância do glassfish remoto?

Se sim, então eu encontrei duas maneiras de fazer isso. Para ambas as opções, configure os mesmos resources do JMS de connection factory e de destino (fila) nas instâncias de glassfish remotas e locais.

1) Defina a propriedade de fábrica de conexão de jms “addressList”

No console de administração glassfish do cliente, acesse Resources->JMS Resources->Connection Factories->jms/YourConnectionFactory->Additional Properties

Inclua uma propriedade adicional com o nome addressList e o valor XX.XX.XX.XX: YYYY, em que o valor é o endereço IP da máquina remota e o número da porta na qual o serviço JMS está sendo executado.

ou

2) Configure o Java Message Service do client glassfish para conectar-se ao glassfish remoto

No console de administração glassfish do cliente, acesse Configurations->server-config->Java Message Service

  • Definir o tipo de serviço JMS: REMOTE (clique em salvar)
  • Configure JMS Hosts->default_JMS_host Endereço IP e porta para ser o endereço IP e a porta do serviço JMS do glassfish remoto

Eu testei ambas as opções para trabalhar com Glassfish 4. Espero que ajude.

Eu não tenho experiência com o Glassfish, mas este cenário funciona com o JBoss (que integra o JBossMQ), e deve ser geralmente aplicável também:

Servidor:

  • Configuração do servidor: crie a fila e vincule-a a um nome para ficar visível no JNDI
  • Configuração do servidor: Certifique-se de que o connection factory esteja visível no JNDI também

Cliente:

  • Pesquise o connection factory e a fila usando o JNDI. Isso possivelmente requer que alguns valores sejam colocados nas propriedades do InitialContext
  • Na parte superior do connection factory e da fila, você pode construir os outros objects (conexão / session / destinatário da fila).

Quanto ao JBoss, é assim:

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

Então, o corretor / agente a passar é JNDI.