繁体   English   中英

JMS点对点聊天

[英]JMS point-to-point chat

我正在尝试进行简单的点对点聊天,但在运行程序后出现异常:

javax.naming.CommunicationException: Failed to get registry service for URL: tcp://localhost:8080/ [Root exception is java.rmi.ConnectIOException: Failed to create connection; nested exception is: 
    org.exolab.jms.net.connector.ConnectException: Failed to connect to localhost:8080]
    at org.exolab.jms.jndi.InitialContextFactory.getInitialContext(InitialContextFactory.java:146)
    at java.naming/javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:732)
    at java.naming/javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305)
    at java.naming/javax.naming.InitialContext.init(InitialContext.java:236)
    at java.naming/javax.naming.InitialContext.<init>(InitialContext.java:208)
    at zad1.Receiver.<init>(Receiver.java:24)
    at zad1.Client.lambda$new$0(Client.java:61)
    ....

可能是什么问题呢? 我在这方面完全是初学者。

这是我的代码:

    private Context context;
    private Connection connection = null;
    private Session session;
    private MessageProducer sender;

    public Sender() {
        try {
            Hashtable<String, String> properties = new Hashtable<>();
            properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.exolab.jms.jndi.InitialContextFactory");
            properties.put(Context.PROVIDER_URL, "tcp://localhost:8080/");

            context = new InitialContext(properties);
            ConnectionFactory factory = (ConnectionFactory) context.lookup("ConnectionFactory");
            Topic topic = (Topic) context.lookup("topic1");

            connection = factory.createConnection();
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            sender = session.createProducer(topic);
            connection.start();
        } catch (Exception ex) {
            ex.printStackTrace();
            System.exit(1);
        }
    }

    public void send(String message) {
        try {
            TextMessage textMessage = session.createTextMessage();
            textMessage.setText(message);
            sender.send(textMessage);
        } catch (JMSException ex) {
            ex.printStackTrace();
        }
    }

来自异常的消息表明问题所在:

Failed to connect to localhost:8080

当您配置 JNDI 查找时,您指定:

properties.put(Context.PROVIDER_URL, "tcp://localhost:8080/");

但是,JNDI 实现无法建立到localhost:8080的连接。 请确保 URL 对于您的环境是正确的和/或 JNDI 服务器实际上在localhost的端口8080上运行。

最后,值得注意的是,您共享的异常的堆栈跟踪与您共享的源代码不匹配。 堆栈跟踪来自名为Receiver的类的构造函数,但您共享的源代码用于名为Sender的类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM