我正在尝试在 Eclipse 中创建一个 jms 发布者/订阅者聊天应用程序。
import java.util.Properties;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class TopicConsumer implements MessageListener {
public static void main(String[] args) throws JMSException, NamingException {
System.out.println(".....Entering JMS example TopicConsumer....");
Context context = TopicConsumer.getInitialContext();
TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory) context.lookup("ConnectionFactory");
Topic topic = (Topic) context.lookup("topic/zaneacademy_jms_tutorial_01");
TopicConnection topicConnection = topicConnectionFactory.createTopicConnection();
TopicSession topicSession = topicConnection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
topicSession.createSubscriber(topic).setMessageListener(new TopicConsumer());
topicConnection.start();
System.out.println("......Exiting JMS Example TopicConsumer.....");
}
public void onMessage(Message message) {
try {
System.out.println("Incoming Messages: " + ((TextMessage)message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
public static Context getInitialContext() throws JMSException, NamingException {
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
props.setProperty("java.naming.provider.url", "localhost:1099");
Context context = new InitialContext(props);
return context;
}
}
尝试运行程序我在控制台中收到以下错误
.....进入JMS示例TopicConsumer...... 线程“主”javax.naming.NameNotFoundException 中的异常:zaneacademy_jms_tutorial_01 未绑定 在 org.jnp.server.NamingServer.getBinding(NamingServer.java:564) 在 org.jnp.server.NamingServer.getBinding(NamingServer.java:572) 在 org.jnp.server.NamingServer.getObject(NamingServer.java:578) 在 org.jnp.server.NamingServer.lookup(NamingServer.java:317) 在 org.jnp.server.NamingServer.lookup(NamingServer.java:291) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 sun.rmi.server.UnicastServerRef.dispatch(未知来源) 在 sun.rmi.transport.Transport$1.run(未知来源) 在 sun.rmi.transport.Transport$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 sun.rmi.transport.Transport.serviceCall(未知来源) 在 sun.rmi.transport.tcp.TCPTransport.handleMessages(未知来源) 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(未知来源) 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(未知来源) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(未知来源) 在 sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(未知来源) 在 sun.rmi.transport.StreamRemoteCall.executeCall(未知来源) 在 sun.rmi.server.UnicastRef.invoke(未知来源) 在 java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(未知来源) 在 java.rmi.server.RemoteObjectInvocationHandler.invoke(未知来源) 在 com.sun.proxy.$Proxy0.lookup(未知来源) 在 org.jnp.interfaces.NamingContext.lookup(NamingContext.java:669) 在 org.jnp.interfaces.NamingContext.lookup(NamingContext.java:629) 在 javax.naming.InitialContext.lookup(未知来源) 在 TopicConsumer.main(TopicConsumer.java:19)