远程JMS队列的客户端

spe*_*eer 8 java jms glassfish glassfish-3

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

Ste*_*ans 11

如果您的客户端应用程序在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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*ans 6

您的客户端应用程序是否在本地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_hostIP地址和端口设置为远程glassfish JMS服务的IP地址和端口

我已经测试了两种与Glassfish 4一起使用的选项.希望它有所帮助.