远程JMS队列的客户端

我在远程glassfish服务器上配置了JMS队列。 我正在尝试从本地计算机连接此队列。 是否可以直接连接到此服务器,或者我需要通过某个代理/代理连接? 它是如何工作的? (我在jms地区很新鲜)非常感谢

如果您的客户端应用程序在Glassfish外部运行,则这是一个开放式mq客户端的简单代码示例。

要使其工作,您需要从glassfishInstall / mq / lib目录中引用2个openmq jar – 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); } } } 

您的客户端应用程序是否在本地glassfish实例中运行并尝试连接到远程glassfish实例的JMS资源?

如果是,那么我找到了两种方法来做到这一点。 对于这两个选项,在远程和本地glassfish实例中设置相同的连接工厂和目标(队列)JMS资源。

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

  • 设置JMS服务类型:REMOTE(单击保存)
  • 将JMS Hosts->default_JMS_host IP地址和端口设置为远程glassfish JMS服务的IP地址和端口

我已经测试了使用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。