簡體   English   中英

JBoss-A-MQ在JMS消息傳遞應用程序中遇到UnknownHostException

[英]JBoss-A-MQ encountered an UnknownHostException in JMS messaging application

我有一個示例JMS消息傳遞應用程序,如下面的片段所示。 當我執行程序時(特別是在啟動連接時),我收到UnknowHostException。 發生異常的原因是clientid屬性get為null。

應用程序:公共類MessagingTestApp {

private static final String MY_JMS_CONNECTION_FACTORY_NAME = "myJmsFactory";
private static final String EXCHANGE_NAME = "topicExchange";
private static final String JNDI_PROPERTIES_FILE_NAME = "jndi.properties";
private static final String COULD_NOT_LOAD_JNDI_PROPERTIES_MESSAGE = "Could not load JNDI properties....";
private static final boolean NON_TRANSACTED = false;
private static final Logger LOG = Logger.getLogger(MessagingTestApp.class);

public  MessagingTestApp() {}

public static void main(String[] args) {
    MessagingTestApp messagingTestApp = new MessagingTestApp();
    messagingTestApp.runTest();
}

private void runTest() {
    try {
        Properties properties = new Properties();
        properties.load(loadPropertiesFile());
        Context context = new InitialContext(properties);
        ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup(MY_JMS_CONNECTION_FACTORY_NAME);
        Connection connection = connectionFactory.createConnection();

        connection.start();
        Session session = connection.createSession(NON_TRANSACTED, Session.AUTO_ACKNOWLEDGE);
        Destination destination = (Destination) context.lookup(EXCHANGE_NAME);
        MessageProducer messageProducer = session.createProducer(destination);
        MessageConsumer messageConsumer = session.createConsumer(destination);

        TextMessage message = session.createTextMessage("Hello JMS!");
        messageProducer.send(message);

        message = (TextMessage) messageConsumer.receive();
        System.out.println(message.getText());

        connection.close();
        context.close();
    } catch (Exception e) {
        LOG.error(e);
        e.printStackTrace();
    }
}

private InputStream loadPropertiesFile() {
    Thread currentThread = Thread.currentThread();
    ClassLoader contextClassLoader = currentThread.getContextClassLoader();
    InputStream propertiesStream = contextClassLoader.getResourceAsStream(JNDI_PROPERTIES_FILE_NAME);
    if (propertiesStream != null) {
        return propertiesStream;
    } else {
        System.out.println(COULD_NOT_LOAD_JNDI_PROPERTIES_MESSAGE);
        return null;
    }
}
}

JNDI屬性文件:

java.naming.factory.initial = org.apache.qpid.amqp_1_0.jms.jndi.PropertiesFileInitialContextFactory
java.naming.provider.url = src/main/resources/jndi.properties


connectionfactory.myJmsFactory = amqp://admin:admin@clientid/test?

brokerlist = 'tcp://localhost:5672'

destination.topicExchange = amq.topic

堆棧跟蹤:

javax.jms.JMSException: java.net.UnknownHostException: clientid
    at org.apache.qpid.amqp_1_0.jms.impl.ConnectionImpl.connect(ConnectionImpl.java:112)
    at org.apache.qpid.amqp_1_0.jms.impl.ConnectionImpl.start(ConnectionImpl.java:266)
    at com.adc.efg.MessagingTestApp.runTest(MessagingTestApp.java:39)
    at com.adc.efg.MessagingTestApp.main(MessagingTestApp.java:28)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: org.apache.qpid.amqp_1_0.client.ConnectionException: java.net.UnknownHostException: clientid
    at org.apache.qpid.amqp_1_0.client.Connection.<init>(Connection.java:271)
    at org.apache.qpid.amqp_1_0.client.Connection.<init>(Connection.java:135)
    at org.apache.qpid.amqp_1_0.jms.impl.ConnectionImpl.connect(ConnectionImpl.java:105)
    ... 8 more
Caused by: java.net.UnknownHostException: clientid
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at java.net.Socket.connect(Socket.java:528)
    at java.net.Socket.<init>(Socket.java:425)
    at java.net.Socket.<init>(Socket.java:208)
    at org.apache.qpid.amqp_1_0.client.Connection.<init>(Connection.java:159)
    ... 10 more

我是JBoss-AMQ和JMS的新手。 如果有人可以指出我在哪里出了錯,我將非常感激。

問題出在JNDI屬性文件中。 應該像下面這樣

java.naming.factory.initial = org.apache.qpid.amqp_1_0.jms.jndi.PropertiesFileInitialContextFactory
java.naming.provider.url = src/main/resources/jndi.properties


connectionfactory.myJmsFactory = amqp://admin:admin@localhost/test?

brokerlist = 'tcp://localhost:5672'

destination.topicExchange = amq.topic

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM