代码之家  ›  专栏  ›  技术社区  ›  Shi Zhang

无法连接到Solace云

  •  0
  • Shi Zhang  · 技术社区  · 6 年前

    我正在遵循发布/订阅的Solace教程(链接: https://dev.solace.com/samples/solace-samples-java/publish-subscribe/ )因此,代码不应该有任何“错误”。

    我正在尝试让topicsubscriber连接到云。在构建jar之后,我运行以下命令:

    java -cp target/SOM_Enrichment-1.0-SNAPSHOT.jar TopicSubscriber <host:port> <client-username@message-vpn> <password>

    (填写适当的字段)

    我得到以下错误:

    TopicSubscriber initializing...
    Jul 12, 2018 2:27:56 PM com.solacesystems.jcsmp.protocol.impl.TcpClientChannel call
    INFO: Connecting to host 'blocked out' (host 1 of 1, smfclient 2, attempt 1 of 1, this_host_attempt: 1 of 1)
    Jul 12, 2018 2:28:17 PM com.solacesystems.jcsmp.protocol.impl.TcpClientChannel call
    INFO: Connection attempt failed to host 'blocked out' ConnectException com.solacesystems.jcsmp.JCSMPTransportException: ('blocked out') - Error communicating with the router. cause: java.net.ConnectException: Connection timed out: no further information ((Client name: 'blocked out'   Local port: -1   Remote addr: 'blocked out') - )
    Jul 12, 2018 2:28:20 PM com.solacesystems.jcsmp.protocol.impl.TcpClientChannel close
    INFO: Channel Closed (smfclient 2)
    Exception in thread "main" com.solacesystems.jcsmp.JCSMPTransportException" (Client name: 'blocked out'   Local port: -1   Remote addr: 'blocked out') - Error communicating with the router.
    

    下面是topicsubscriber.java文件:

    import java.util.concurrent.CountDownLatch;
    
    import com.solacesystems.jcsmp.BytesXMLMessage;
    import com.solacesystems.jcsmp.JCSMPException;
    import com.solacesystems.jcsmp.JCSMPFactory;
    import com.solacesystems.jcsmp.JCSMPProperties;
    import com.solacesystems.jcsmp.JCSMPSession;
    import com.solacesystems.jcsmp.TextMessage;
    import com.solacesystems.jcsmp.Topic;
    import com.solacesystems.jcsmp.XMLMessageConsumer;
    import com.solacesystems.jcsmp.XMLMessageListener;
    
    public class TopicSubscriber {
    
        public static void main(String... args) throws JCSMPException {
    
            // Check command line arguments
        if (args.length != 3 || args[1].split("@").length != 2) {
            System.out.println("Usage: TopicSubscriber <host:port> <client-username@message-vpn> <client-password>");
            System.out.println();
            System.exit(-1);
        }
        if (args[1].split("@")[0].isEmpty()) {
            System.out.println("No client-username entered");
            System.out.println();
            System.exit(-1);
        }
        if (args[1].split("@")[1].isEmpty()) {
            System.out.println("No message-vpn entered");
            System.out.println();
            System.exit(-1);
        }
    
        System.out.println("TopicSubscriber initializing...");
        final JCSMPProperties properties = new JCSMPProperties();
        properties.setProperty(JCSMPProperties.HOST, args[0]);     // host:port
        properties.setProperty(JCSMPProperties.USERNAME, args[1].split("@")[0]); // client-username
        properties.setProperty(JCSMPProperties.PASSWORD, args[2]); // client-password
        properties.setProperty(JCSMPProperties.VPN_NAME, args[1].split("@")[1]); // message-vpn
        final Topic topic = JCSMPFactory.onlyInstance().createTopic("tutorial/topic");
        final JCSMPSession session = JCSMPFactory.onlyInstance().createSession(properties);
    
        session.connect();
    
        final CountDownLatch latch = new CountDownLatch(1); // used for
        // synchronizing b/w threads
        /** Anonymous inner-class for MessageListener
         *  This demonstrates the async threaded message callback */
        final XMLMessageConsumer cons = session.getMessageConsumer(new XMLMessageListener() {
            @Override
            public void onReceive(BytesXMLMessage msg) {
                if (msg instanceof TextMessage) {
                    System.out.printf("TextMessage received: '%s'%n",
                            ((TextMessage) msg).getText());
                } else {
                    System.out.println("Message received.");
                }
                System.out.printf("Message Dump:%n%s%n", msg.dump());
                latch.countDown();  // unblock main thread
            }
    
            @Override
            public void onException(JCSMPException e) {
                System.out.printf("Consumer received exception: %s%n", e);
                latch.countDown();  // unblock main thread
            }
        });
        session.addSubscription(topic);
        System.out.println("Connected. Awaiting message...");
        cons.start();
        // Consume-only session is now hooked up and running!
    
        try {
            latch.await(); // block here until message received, and latch will flip
        } catch (InterruptedException e) {
            System.out.println("I was awoken while waiting");
        }
        // Close consumer
        cons.close();
        System.out.println("Exiting.");
        session.closeSession();
     }
    }
    

    任何帮助都将不胜感激。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Russell Sim    6 年前

    java.net.ConnectException: Connection timed out

    日志条目指示无法建立到指定DNS名称/IP地址的网络连接。

    下一步包括:

    1. 验证您是否能够将DNS名称解析为IP 地址。
    2. 正在验证是否使用了正确的DNS名称/IP地址/端口-您需要solace云连接详细信息中的“smf主机”。
    3. 正在验证IP地址/端口是否未被中间网络设备阻止。