错误:AMQ214016:无法创建网络连接-Spring Boot应用程序无法连接到远程jboss jms队列

问题描述 投票:0回答:2

我无法连接到远程Jboss jms队列,因为无法创建上下文。我有此错误:

mag 18, 2020 9:38:44 AM org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnector 
createConnection
ERROR: AMQ214016: Failed to create netty connection
java.nio.channels.UnresolvedAddressException

我使用此代码,例外发生在最后一行:

private static final String DEFAULT_MESSAGE = "Hello, World!";
private static final String DEFAULT_CONNECTION_FACTORY = "jms/RemoteConnectionFactory";
private static final String DEFAULT_DESTINATION = "queue/JMSTestQueueName";
private static final String DEFAULT_USERNAME = "user";
private static final String DEFAULT_PASSWORD = "pass";
private static final String INITIAL_CONTEXT_FACTORY = 
 "org.jboss.naming.remote.client.InitialContextFactory";    
private static final String PROVIDER_URL = "http-remoting://host:8080";
    try {
        String userName = System.getProperty("username", DEFAULT_USERNAME);
        String password = System.getProperty("password", DEFAULT_PASSWORD);

        final Properties env = new Properties();
        env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
        env.put(Context.PROVIDER_URL, System.getProperty(Context.PROVIDER_URL, PROVIDER_URL));
        env.put(Context.SECURITY_PRINCIPAL, userName);
        env.put(Context.SECURITY_CREDENTIALS, password);                
        namingContext = new InitialContext(env);

        String connectionFactoryString = 
                System.getProperty("connection.factory", DEFAULT_CONNECTION_FACTORY);

        log.info("Attempting to acquire connection factory \"" + connectionFactoryString + "\"");

        ConnectionFactory connectionFactory = (ConnectionFactory) namingContext.
                lookup(connectionFactoryString);

        log.info("Found connection factory \"" + connectionFactoryString + "\" in JNDI");

        String destinationString = System.getProperty("destination", DEFAULT_DESTINATION);
        log.info("Attempting to acquire destination \"" + destinationString + "\"");
        Destination destination = (Destination) namingContext.lookup(destinationString);

        log.info("Found destination \"" + destinationString + "\" in JNDI");

        int count = Integer.parseInt(System.getProperty("message.count", DEFAULT_MESSAGE_COUNT));
        String content = System.getProperty("message.content", DEFAULT_MESSAGE);
        try (JMSContext context = connectionFactory.createContext(userName, password)) {

和我的standalone-full.xml是这样的:

<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:0.0.0.0}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:0.0.0.0}"/>
</interface>
<interface name="insecure">
<inet-address value="${jboss.bind.address.unsecure:0.0.0.0}"/>
</interface>
<interface name="messaging-interface">
<inet-address value="0.0.0.0"/>
</interface>

您有什么建议吗?预先感谢!

spring-boot jboss netty spring-jms jms-queue
2个回答
0
投票

我的套接字配置

     <interfaces>
        <interface name="management">
            <inet-address value="${jboss.bind.address.management:0.0.0.0}"/>
        </interface>
        <interface name="public">
            <inet-address value="${jboss.bind.address:0.0.0.0}"/>
        </interface>
        <interface name="unsecure">
            <inet-address value="${jboss.bind.address.unsecure:0.0.0.0}"/>
        </interface>
        <interface name="messaging-interface">
              <inet-address value="0.0.0.0"/>
        </interface>
    </interfaces>
    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
        <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
        <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
        <socket-binding name="http" port="${jboss.http.port:8080}"/>
        <socket-binding name="https" port="${jboss.https.port:8443}"/>
        <socket-binding name="iiop" interface="unsecure" port="3528"/>
        <socket-binding name="iiop-ssl" interface="unsecure" port="3529"/>
        <socket-binding name="txn-recovery-environment" port="4712"/>
        <socket-binding name="txn-status-manager" port="4713"/>
        <socket-binding name="remoting" port="4447"/>
        <socket-binding name="messaging" port="8080" interface="messaging-interface"/>
        <outbound-socket-binding name="mail-smtp">
            <remote-destination host="localhost" port="25"/>
        </outbound-socket-binding>
        <outbound-socket-binding name="http-remote-jms">
            <remote-destination host="MY_HOSTNAME" port="${jboss.http.port:8080}"/>
        </outbound-socket-binding>
    </socket-binding-group>
</server>

0
投票

完整的消息传递配置

 package org.jboss.as.quickstarts.jms;

import java.util.logging.Logger;
import java.util.Properties;
import javax.inject.Inject;
import javax.jms.ConnectionFactory;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.activemq.artemis.api.core.TransportConfiguration;
import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient;
import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSConnectionFactory;
import javax.jms.JMSConsumer;
import javax.jms.JMSContext;
import javax.jms.JMSPasswordCredential;

public class HelloWorldJMSClient {
    private static final Logger log = Logger.getLogger(HelloWorldJMSClient.class.getName());
// Set up all the default values
private static final String DEFAULT_MESSAGE = "Hello, World!";
//private static final String DEFAULT_CONNECTION_FACTORY = "jms/RemoteConnectionFactory";
private static final String DEFAULT_CONNECTION_FACTORY = "jms/RemoteConnectionFactory";
private static final String DEFAULT_DESTINATION = "jms/queue/JMSTestQueueName";
private static final String DEFAULT_MESSAGE_COUNT = "10";
private static final String DEFAULT_USERNAME = "user";
private static final String DEFAULT_PASSWORD = "pass!";
private static final String INITIAL_CONTEXT_FACTORY = "org.jboss.naming.remote.client.InitialContextFactory";   
private static final String PROVIDER_URL = "http-remoting://"host":8080";


public static void main(String[] args) {

    Context namingContext = null;
    //  JMSContext context = null;       

    try {
        String userName = System.getProperty("username", DEFAULT_USERNAME);
        String password = System.getProperty("password", DEFAULT_PASSWORD);

        // Set up the namingContext for the JNDI lookup
        final Properties env = new Properties();
        env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);
        env.put(Context.PROVIDER_URL, System.getProperty(Context.PROVIDER_URL, PROVIDER_URL));
        env.put(Context.SECURITY_PRINCIPAL, userName);
        env.put(Context.SECURITY_CREDENTIALS, password);                
        namingContext = new InitialContext(env);

        // Perform the JNDI lookups
        String connectionFactoryString = 
                System.getProperty("connection.factory", DEFAULT_CONNECTION_FACTORY);

        log.info("Attempting to acquire connection factory \"" + connectionFactoryString + "\"");

        ConnectionFactory connectionFactory = (ConnectionFactory) namingContext.
                lookup(connectionFactoryString);

        log.info("Found connection factory \"" + connectionFactoryString + "\" in JNDI");

        String destinationString = System.getProperty("destination", DEFAULT_DESTINATION);
        log.info("Attempting to acquire destination \"" + destinationString + "\"");
        Destination destination = (Destination) namingContext.lookup(destinationString);

        log.info("Found destination \"" + destinationString + "\" in JNDI");

        int count = Integer.parseInt(System.getProperty("message.count", DEFAULT_MESSAGE_COUNT));

        log.info("Found count");

        String content = System.getProperty("message.content", DEFAULT_MESSAGE);
        log.info("Found content");

        try (
                JMSContext context = connectionFactory.createContext(userName, password)) {

            // Create the JMS consumer

            JMSConsumer consumer = context.createConsumer(destination);

            // Then receive the same number of messages that were sent

            for (int i = 0; i < count; i++) {
                String text = consumer.receiveBody(String.class, 5000);
                log.info("Received message with content " + text);
            }
        }finally {
            if (namingContext != null) {
                try {
                    namingContext.close();
                } catch (NamingException e) {
                    log.severe(e.getMessage());
                }
            }
        }
    } catch (NamingException e) {
        //log.severe(e.getMessage());
        log.info("IN CATCH");
        e.printStackTrace();
    } 
}

}

© www.soinside.com 2019 - 2024. All rights reserved.