ActiveMQ les connexions à distance refusé, malgré 0.0.0.0 dans courtier URL
J'ai un ActiveMQ v5.7.0 courtier exécutant dans Karaf v2.3.3, que je veux activer les connexions à distance. J'ai mis l'URL de courtier à 0.0.0.0:61616, afin de lui permettre d'écouter le trafic réseau. J'ai ouvert le pare-feu pour autoriser le trafic à partir de l'ordinateur client. Cependant, toutes les connexions à distance sont en train d'être refusé. Un rapide netstat semble me dire que le courtier n'est pas à l'écoute à l'extérieur de localhost.
jeremy@server:~$ netstat -pan | grep 61616
tcp6 0 0 127.0.0.1:61616 :::* LISTEN -
En regardant le courtier via Hawtio me dit que l'URL se présente comme il se doit.
Transport connectors Openwire: tcp://0.0.0.0:61616?maximumConnections=1000&wireformat.maxFrameSize=104857600
Le pare-feu est certainement OK, comme les connexions sont refusé plutôt que d'être simplement abandonné.
Le courtier est de répondre correctement à des connexions à partir de localhost.
2013-10-14 17:34:29 Connected to localhost:61613
C'est le genre d'erreur que je reçois de connexions à distance:-
Error connecting to xxx.xxx.xxx.xxx:61613: IO::Socket::INET: connect: Connection refused at /usr/local/share/perl/5.14.2/Net/Stomp.pm line 102.
MODIFIER: telnet sortie ajouté
Localhost port 61613
jeremy@server:~$ telnet localhost 61613
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Port de connexion à distance 61613
jeremy@other-server:~$ telnet xxx.xxx.xxx.xxx 61613
Trying xxx.xxx.xxx.xxx...
telnet: Unable to connect to remote host: Connection refused
Localhost port de connexion 61616 (c'est intéressant)
jeremy@server:~$ telnet localhost 61616
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
ðActiveMQ Þ
MaxFrameSizÿÿÿ CacheSize
CacheEnabledSizePrefixDisabled MaxInactivityDurationInitalDelay'TcpNoDelayEnabledMaxInactivityDurationu0TightEncodingEnabledStackTraceEnabledPuTTYConnection closed by foreign host.
Port de connexion à distance 61616
jeremy@other-server:~$ telnet xxx.xxx.xxx.xxx 61616
Trying xxx.xxx.xxx.xxx...
telnet: Unable to connect to remote host: Connection refused
MODIFIER à distance: le serveur karaf la sortie du journal ajouté
2013-10-15 19:00:46,599 | ERROR | c.event.invited] | faultJmsMessageListenerContainer | .DefaultMessageListenerContainer 909 | 69 - org.springframework.jms - 3.2.4.RELEASE | Could not refresh JMS Connection for destination 'Consumer.notifications.VirtualTopic.event.invited' - retrying in 5000 ms. Cause: Error while attempting to add new Connection to the pool; nested exception is javax.jms.JMSException: Could not connect to broker URL: tcp://xxx.xxx.xxx.xxx:61616. Reason: java.net.ConnectException: Connection refused
Voici l'broker.xml.
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
xmlns:amq="http://activemq.apache.org/schema/core">
<ext:property-placeholder />
<broker xmlns="http://activemq.apache.org/schema/core"
brokerName="jellyfish-messaging"
dataDirectory="${karaf.data}/activemq/localhost"
useShutdownHook="false"
persistent="true"
schedulerSupport="true"
startAsync="true">
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" producerFlowControl="true" memoryLimit="1mb">
<pendingSubscriberPolicy>
<vmCursor />
</pendingSubscriberPolicy>
</policyEntry>
<policyEntry queue=">" producerFlowControl="true" memoryLimit="1mb">
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
<persistenceAdapter>
<kahaDB directory="${karaf.data}/activemq/localhost/kahadb"/>
</persistenceAdapter>
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage limit="64 mb"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="100 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="50 gb"/>
</tempUsage>
</systemUsage>
</systemUsage>
<!-- The transport connectors ActiveMQ will listen to -->
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireformat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireformat.maxFrameSize=104857600"/>
</transportConnectors>
</broker>
<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://0.0.0.0:61616" />
</bean>
<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
<property name="maxConnections" value="8" />
<property name="maximumActive" value="500" />
<property name="connectionFactory" ref="jmsConnectionFactory" />
</bean>
<bean id="resourceManager" class="org.apache.activemq.pool.ActiveMQResourceManager" init-method="recoverResource">
<property name="transactionManager" ref="transactionManager" />
<property name="connectionFactory" ref="jmsConnectionFactory" />
<property name="resourceName" value="activemq.localhost" />
</bean>
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="pooledConnectionFactory" />
<property name="transacted" value="false" />
<property name="concurrentConsumers" value="10" />
</bean>
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="configuration" ref="jmsConfig" />
</bean>
<reference id="transactionManager" interface="javax.transaction.TransactionManager" />
<service ref="pooledConnectionFactory" interface="javax.jms.ConnectionFactory">
<service-properties>
<entry key="name" value="localhost"/>
</service-properties>
</service>
</blueprint>
Quelqu'un peut me dire ce que je suis absent?
Merci,
J.
- Pouvez-vous s'il vous plaît essayer l'utilitaire telnet à la fois 61613 et 61616 à partir d'un local et de l'hôte distant et ajouter le résultat à la question?
- Fait - merci beaucoup.
- Tout cela semble OK à partir d'un ActiveMQ config point de vue. Il se sent certainement comme un problème de firewall - si vous êtes sur une machine Linux, vous pouvez avoir un local comme iptables en cours d'exécution. Telnet à JMX (1099) devrait confirmer - il n'y a rien dans toute config qui bloque des boîtiers distants.
- Merci, je suis retournée sur elle et il n'a vraiment pas l'air d'un problème de firewall. La commande netstat sortie (en haut de mon post) m'indique que ActiveMQ est pas à l'écoute à l'extérieur de localhost. J'ai essayé de telnet à partir de la ActiveMQ serveur à sa propre adresse IP, avec le pare-feu désactivé, et je reçois toujours "Connexion Refusée".
jeremy@server:~$ sudo ufw disable Firewall stopped and disabled on system startup jeremy@server:~$ telnet xxx.xxx.xxx.xxx 61616 Trying xxx.xxx.xxx.xxx... telnet: Unable to connect to remote host: Connection refused jeremy@server:~$ sudo ufw enable
- Juste une réflexion supplémentaire - ce que quelqu'un pourrait partager un exemple de travail broker.xml qui accepte le trafic externe? Juste au cas où il y a quelque chose, sinon, saute évidemment de mal avec la mienne.
- La valeur par défaut
conf/activemq.xml
accepte le trafic externe. - Merci encore - je vais déployer une copie de celui-ci sur le gênants de la machine et de voir à quoi il ressemble dans la commande netstat.
Vous devez vous connecter pour publier un commentaire.
J'ai réglé ce problème. Il n'était ni un problème avec le pare-feu, ni avec la ActiveMQ de configuration.
Karaf kar fichier dans lequel le courtier ActiveMQ a été défini inclus le activemq-web-console fonctionnalité. Nous n'avons pas été à l'aide de cette fonction, comme nous sommes fans de Hawtio, donc, n'avait jamais configuré.
Comme par ce blog, la console était à venir avec les paramètres par défaut, y compris l'écoute sur le port 61616. Cela signifiait que les deux courtiers étaient dans une condition de concurrence sur les start-up et la webconsole défini un était généralement le gagnant. Car par défaut, il n'est pas configuré pour l'accès à distance, il a été le verrouillage du port pour les connexions localhost seulement.
Le cadeau a été un répertoire appelé ${activemq.données} (littéralement) à l'intérieur de la Karaf répertoire personnel, contenant un deuxième Kahadb référentiel. Tous nos courtier config a été configuré pour utiliser le données répertoire et nous n'avons jamais spécifiquement l'ActiveMQ variables d'environnement, donc cela nous a conduit à chercher où un deuxième courtier peut venir d'.
Pourrait avoir repéré plus rapidement, on a fait activemq:liste à l'intérieur d'un Karaf session, comme il était d'inscription de deux courtiers.
Solution Simple: supprimer activemq-web-console les fonctionnalités XML.