【问题标题】:HornetQ: Remote client connect to HornetQ server which was running in VMHornetQ:远程客户端连接到在 VM 中运行的 HornetQ 服务器
【发布时间】:2014-09-21 17:57:12
【问题描述】:

我是 HornetQ 的新手,我尝试了 2-3 天但没有希望。 我需要创建一个客户端,它将从 HornetQ 服务器(在虚拟机中)接收消息,但我的客户端似乎无法连接到远程 HornetQ 服务器。

预期:

1 HornetQ stand-alone and sender (in VM)
2 clients as receivers (in real machine)

发件人:

Map<String, Object> connectionParams = new HashMap<String, Object>();
//localhost(127.0.0.1 where is my VM locates)
//port 5445 (default port of HornetQ)
connectionParams.put(TransportConstants.HOST_PROP_NAME, "localhost");
connectionParams.put(TransportConstants.PORT_PROP_NAME, 5445);
TransportConfiguration transportConfiguration = new TransportConfiguration(NettyConnectorFactory.class.getName(), connectionParams);
//Create ConnectionFactory
ConnectionFactory cf = new HornetQTopicConnectionFactory(false, transportConfiguration);
//Create Connection
connection = cf.createConnection();
//Create Session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
connection.start();
//Create Topic
topic = HornetQJMSClient.createTopic("myTopic");
//Create Producer
MessageProducer producer = session.createProducer(topic);

接收者:

    Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,"org.jboss.naming.remote.client.InitialContextFactory");
    p.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");
    p.put(Context.PROVIDER_URL, "remote://localhost:5445");
    p.put(Context.SECURITY_PRINCIPAL, "username");
    p.put(Context.SECURITY_CREDENTIALS, "password");
    InitialContext context  = new InitialContext(p);
    //Create ConnectionFactory
    ConnectionFactory factory = (ConnectionFactory)context.lookup("/ConnectFatory");
    //Create connection
    connection = (Connection) factory.createConnection();
    //Create session
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    topic = (HornetQTopic) HornetQJMSClient.createTopic("myTopic");
    //Create consumer
    MessageConsumer consumer = session.createConsumer(topic);

当我在 VM 中 ./run.sh 时(发件人工作正常) 然后我在真机上运行客户端(接收器),但它无法连接到 HornetQ 服务器(在 VM 中运行)

javax.naming.NamingException: Failed to connect to any server. Servers tried: [remote://localhost:5445]
  at org.jboss.naming.remote.client.HaRemoteNamingStore.failOverSequence(HaRemoteNamingStore.java:213)
  at org.jboss.naming.remote.client.HaRemoteNamingStore.namingStore(HaRemoteNamingStore.java:144)
  at org.jboss.naming.remote.client.HaRemoteNamingStore.namingOperation(HaRemoteNamingStore.java:125)
  at org.jboss.naming.remote.client.HaRemoteNamingStore.lookup(HaRemoteNamingStore.java:241)
  at org.jboss.naming.remote.client.RemoteContext.lookup(RemoteContext.java:79)
  at org.jboss.naming.remote.client.RemoteContext.lookup(RemoteContext.java:83)
  at javax.naming.InitialContext.lookup(InitialContext.java:411)
  at com.dtv.apg.hornetq.SubA.run(SubA.java:70)
  at java.lang.Thread.run(Thread.java:722)

感谢您的任何建议。

【问题讨论】:

  • 发多行代码时,请用cmets解释一下。
  • 感谢@Andy897 的指导
  • 对于其他人来说,如果你也发布你的进口声明会很好。

标签: jms hornetq remote-client


【解决方案1】:

现在我尽量保持简单

  1. 我在其他 PC (10.88.106.223) 中启动 HornetQ 并在 hornetq-configuration.xml 中更改接受器

param key="host" value="10.88.106.223"

param key="port" value="5445"

它的工作,似乎我为虚拟机(127.0.0.1)选择了错误的 IP。 祝你有美好的一天。

【讨论】:

    猜你喜欢
    • 2013-07-11
    • 2023-03-04
    • 2013-10-19
    • 2020-08-29
    • 1970-01-01
    • 2012-12-21
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多