2013-06-24 187 views
6

我在遠程glassfish服務器上配置了JMS隊列。我試圖從我的本地機器連接這個隊列。是否有可能直接連接到這臺服務器,或者我需要通過一些經紀人/代理連接?它是如何工作的? (我在新鮮JMS區) 非常感謝遠程JMS隊列的客戶端

回答

10

如果您的客戶端應用程序在Glassfish外部運行,這裏是一個開放mq客戶端的簡單代碼示例。

爲了得到它的工作,你將需要從glassfishInstall/MQ/lib目錄參考2個openmq罐子 - 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以及

客戶:

  • 查找兩個連接工廠和使用JNDI的隊列。這可能需要將一些值放入屬性中,以便連接工廠和隊列之上可以構建其他對象(隊列連接/會話/接收器)。

至於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

您的客戶端應用程序是否在本地glassfish實例中運行並嘗試連接到遠程glassfish實例的JMS資源?

如果是,那麼我找到了2種方法來做到這一點。對於這兩個選項,在遠程和本地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地址和端口爲遠程的IP地址和端口glassfish JMS服務

我測試了Glassfish 4的兩個選項。希望它有幫助。