正确的ConnectionFactory用于发送远程JMS消息jboss 7.1.1

正确的ConnectionFactory用于发送远程JMS消息jboss 7.1.1,jms,jboss7.x,messaging,ejb-3.1,hornetq,Jms,Jboss7.x,Messaging,Ejb 3.1,Hornetq,在VM外部发送消息时使用的连接工厂是什么 我在JBOSS/standalone/configuration/configuration_full.xml中看到两个工厂:InVmConnectionFactory和RemoteConnectionFactory 这是唯一可用的工厂吗 我的实际配置是: SERVER standalone_full.xml 上下文构建类似于: Properties properties = new Properties(); properties.put(Contex

在VM外部发送消息时使用的连接工厂是什么

我在JBOSS/standalone/configuration/configuration_full.xml中看到两个工厂:InVmConnectionFactoryRemoteConnectionFactory
这是唯一可用的工厂吗

我的实际配置是:

SERVER standalone_full.xml

上下文构建类似于:

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);
我得到的错误是:

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 org.hornetq.jms.client.HornetQJMSConnectionFactory@36cdb608
如果我尝试在同一个jboss(同一个VM)中部署两个应用程序server application.earremote application.ear,则消息传递工作正常

当我使用两个JBosse(在同一台macchine中)时,就会出现这个问题

有人知道吗?

提前感谢。

InVmConnectionFactory引用了一个in-vm连接器,当客户端和服务器都在同一个JVM中运行时,可以使用它发送和接收消息。RemoteConnectionFactory引用一个netty连接器,当客户端和服务器在不同的JVM中运行时,可用于发送和接收消息。您可以基于连接器定义自己的连接工厂


关于错误,您可以发布完整的堆栈跟踪吗?

JBossDeveloper论坛上的这个答案就是这个问题的答案:


将不显示使两个节点交换消息的Netty配置的完整工作示例,但对于理解这一概念非常有帮助。

感谢您的回复。RemoteConnectionFactory按原样使用netty连接器不足以连接到远程Machine/jvm。唯一的方法似乎是定义您自己的连接工厂,或者更改实际的“网络”配置,使用发送/侦听的IP/端口配置
connector
acceptor
。在不同的Macchine中使用两个jboss时,在发送同步消息(在临时队列中等待应答)时,错误仍然存在。另一个令人好奇的是,第一次正确发送消息并正确接收回复。第二次尝试发送时,我收到了错误。我将详细地改变主要问题。
ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup("jms/RemoteConnectionFactory");
Destination destination = (Destination) ctx.lookup("jms/queue/remoteQueue");
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);
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 org.hornetq.jms.client.HornetQJMSConnectionFactory@36cdb608