2017-02-17 2 views
-1

Welche Verbindungsfactory wird zum Senden von Nachrichten außerhalb der VM verwendet?Korrekte ConnectionFactory zum Senden entfernter JMS-Nachrichten jboss 7.1.1

Ich sehe in JBOSS/Standalone/configuration/configuration_full.xml zwei Fabriken: InVmConnectionFactory und RemoteConnectionFactory.
Sind dies die einzigen verfügbaren Fabriken?

Meine aktuelle Konfiguration ist:

SERVER standalone_full.xml

<subsystem xmlns="urn:jboss:domain:messaging:1.1"> 
    <hornetq-server> 
     ... 
     <subsystem xmlns="urn:jboss:domain:messaging:1.1"> 
      <jms-connection-factories> 
       <connection-factory name="InVmConnectionFactory"> 
        <connectors> 
         <connector-ref connector-name="in-vm"/> 
        </connectors> 
        <entries> 
         <entry name="java:/ConnectionFactory"/> 
        </entries> 
       </connection-factory> 
       <connection-factory name="RemoteConnectionFactory"> 
        <connectors> 
         <connector-ref connector-name="netty"/> 
        </connectors> 
        <entries> 
         <entry name="RemoteConnectionFactory"/> 
         <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/> 
        </entries> 
       </connection-factory> 
       <pooled-connection-factory name="hornetq-ra"> 
        <transaction mode="xa"/> 
        <connectors> 
         <connector-ref connector-name="in-vm"/> 
        </connectors> 
        <entries> 
         <entry name="java:/JmsXA"/> 
        </entries> 
       </pooled-connection-factory> 
      </jms-connection-factories> 
     </subsystem xmlns="urn:jboss:domain:messaging:1.1"> 

    </hornetq-server> 
</subsystem xmlns="urn:jboss:domain:messaging:1.1"> 

REMOTE MASCINE standalone_full.xml

<subsystem xmlns="urn:jboss:domain:messaging:1.1"> 
    <hornetq-server> 
     ... 
     <subsystem xmlns="urn:jboss:domain:messaging:1.1"> 
      <jms-connection-factories> same factories as SERVER </jms-connection-factories> 

      <jms-destinations> 
       <jms-queue name="remoteQueue"> 
        <entry name="jms/remoteQueue"/> 
        <entry name="java:jboss/exported/jms/queue/remoteQueue"/> 
       </jms-queue> 
      </jms-destinations> 
     </subsystem xmlns="urn:jboss:domain:messaging:1.1"> 
    </hornetq-server> 
</subsystem xmlns="urn:jboss:domain:messaging:1.1"> 

Lookup von Server-Seite, Server-Anwendung. Ohr:

ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup("jms/RemoteConnectionFactory"); 
Destination destination = (Destination) ctx.lookup("jms/queue/remoteQueue"); 

Kontext bauen wie:

Caused by: java.io.NotSerializableException: org.hornetq.api.core.client.loadbalance.RoundRobinConnectionLoadBalancingPolicy 
Caused by: an exception which occurred: 
    in field loadBalancingPolicy 
    in field serverLocator 
    in object [email protected] 

Wenn ich versuche, beide Anwendungen Server-application.ear und fern application.ear zu implementieren:

Properties properties = new Properties(); 
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); 
properties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); 
properties.put(Context.PROVIDER_URL, "remote://" + messageConnection.getHost() + ":" + messageConnection.getPort()); 
properties.put(Context.SECURITY_PRINCIPAL, messageConnection.getUsername()); 
properties.put(Context.SECURITY_CREDENTIALS, messageConnection.getPassword()); 
Context ctx = new InitialContext(properties); 

Fehler ich in der gleichen jboss (selbe VM), die messaging in Ordnung.

Dieses Problem tritt auf, wenn ich zwei jbosses (in der gleichen Macchine) verwende.

Wer hat eine Idee?
Vielen Dank im Voraus.

Antwort

0

InVmConnectionFactory verweist auf einen in-vm-Connector und kann zum Senden und Empfangen von Nachrichten verwendet werden, wenn sowohl der Client als auch der Server in derselben JVM ausgeführt werden. RemoteConnectionFactory verweist auf einen Netty-Connector und kann zum Senden und Empfangen von Nachrichten verwendet werden, wenn Client und Server in verschiedenen JVMs ausgeführt werden. Sie können Ihre eigene Verbindungsfactory basierend auf Connector definieren.

In Bezug auf Fehler, konnten Sie komplette Stack-Trace buchen?

+0

Danke für die Antwort Varsha. RemoteConnectionFactory AS-IS, nety Connector verwenden ist nicht genug, um eine Verbindung zu einem Remote-Macchine/jvm herzustellen. Der einzige Weg scheint Ihre eigene Verbindungsfabrik zu definieren, oder die tatsächliche "netty" Konfiguration zu ändern, indem Sie "connector" und "acceptor" mit der IP/Schnittstelle konfigurieren, wo gesendet/gehört werden soll. – Ermal

+0

Der Fehler ist immer noch vorhanden, wenn zwei jboss in verschiedenen Maschinen verwendet werden, wenn Synchronisierungsnachrichten gesendet werden (wartende Antwort in einer temporären Warteschlange).Eine andere Kuriosität ist, dass die Nachricht zum ersten Mal korrekt gesendet und korrekt beantwortet wird. Das zweite Mal, wenn ich versuche zu senden, empfange ich den Fehler. Ich werde die Hauptfrage mit Details ändern. – Ermal

0

Diese Antwort im JBossDeveloper Forum ist die Antwort auf die Frage:

Remote JMS queue in JBoss AS 7.1

Werde ein voll funktionsfähiges Beispiel für Netty Konfiguration macht zwei Knoten Austausch von Nachrichten nicht zeigen, aber es ist sehr hilfreich, um das Konzept zu verstehen .

Verwandte Themen