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.
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
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