J'utilise RabbitMQ v3.3.5 avec Erlang OTP 17.1 sur Windows 2008 R2. Les environnements de développement et d'assurance qualité sont autonomes. Mes environnements de transfert et de production sont mis en cluster.
Je trouve ce problème qui se produit souvent lorsque le service RabbitMQ est en cours d’exécution, la console de gestion RabbitMQ voit tout, mais lorsque j’essaie d’exécuter rabbitmqctl à partir de la ligne de commande, il échoue avec une erreur indiquant que le nœud est en panne serveur distant).
Ce problème est résolu si je redémarre le service Windows.
Je ne vois aucun message d'erreur dans le journal des erreurs RabbitMQ. Le dernier message indiquait que le nœud était actif.
Vous trouverez ci-dessous un exemple de sortie du problème que j'ai rencontré récemment sur le noeud 2 de notre cluster de fenêtres de transfert:
PS C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.3.5\sbin> .\rabbitmqctl.bat status
Status of node rabbit@MYSERVER2 ...
Error: unable to connect to node rabbit@MYSERVER2: nodedown
DIAGNOSTICS
===========
attempted to contact: [rabbit@MYSERVER2]
rabbit@MYSERVER2:
* connected to epmd (port 4369) on MYSERVER2
* epmd reports: node 'rabbit' not running at all
no other nodes on MYSERVER2
* suggestion: start the node
current node details:
- node name: rabbitmqctl2199771@MYSERVER2
- home dir: C:\Users\RabbitMQ
- cookie hash: mn6OaTX9mS4DnZaiOzg8pA==
à ce stade, je redémarre le service RabbitMQ puis réessaie
PS C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.3.5\sbin> .\rabbitmqctl.bat status
Status of node rabbit@MYSERVER2...
[{pid,3784},
{running_applications,
[{rabbitmq_management_agent,"RabbitMQ Management Agent","3.3.5"},
{rabbit,"RabbitMQ","3.3.5"},
{os_mon,"CPO CXC 138 46","2.2.15"},
{mnesia,"MNESIA CXC 138 12","4.12.1"},
{xmerl,"XML parser","1.3.7"},
{sasl,"SASL CXC 138 11","2.4"},
{stdlib,"ERTS CXC 138 10","2.1"},
{kernel,"ERTS CXC 138 10","3.0.1"}]},
{os,{win32,nt}},
{erlang_version,
"Erlang/OTP 17 [erts-6.1] [64-bit] [smp:4:4] [async-threads:30]\n"},
{memory,
[{total,35960208},
{connection_procs,2704},
{queue_procs,5408},
{plugins,111936},
{other_proc,13695792},
{mnesia,102296},
{mgmt_db,0},
{msg_index,21816},
{other_ets,884704},
{binary,25776},
{code,16672826},
{atom,602729},
{other_system,3834221}]},
{alarms,[]},
{listeners,[{clustering,25672,"::"},{amqp,5672,"::"},{amqp,5672,"0.0.0.0"}]},
{vm_memory_high_watermark,0.4},
{vm_memory_limit,3435787059},
{disk_free_limit,50000000},
{disk_free,74911649792},
{file_descriptors,
[{total_limit,8092},
{total_used,4},
{sockets_limit,7280},
{sockets_used,2}]},
{processes,[{limit,1048576},{used,139}]},
{run_queue,0},
{uptime,5}]
...done.
Avez-vous une idée de ce qui cause cela et comment détecter automatiquement la situation?
Est-ce spécifiquement un problème avec RabbitMQ sous Windows?
Les noms d'hôte sont insensibles à la casse lorsque vous essayez de les résoudre. Par exemple, LOCALHOST
et localhost
sont le même hôte.
Cependant, lorsque Erlang construit le nom d'un nœud (par exemple, rabbit@<hostname>
dans le cas de RabbitMQ), ce nom est sensible à la casse. Donc, rabbit@LOCALHOST
et rabbit@localhost
sont deux noms de nœuds différents, même s’ils fonctionnent sur le même hôte.
Récemment, nous (l'équipe RabbitMQ) avons découvert que, sous Windows, le nom du nœud construit pour RabbitMQ était incohérent . Par conséquent, parfois, RabbitMQ démarré en tant que service Windows pourrait s'appeler rabbit@MYHOST
mais rabbitmqctl
tenterait d'atteindre rabbit@myhost
et échouerait.
Depuis RabbitMQ 3.6.0, le nom du nœud devrait être cohérent.
Pour quiconque ayant cette erreur, c’était ma solution. J'ai installé Erlang, mais j'ai oublié les instructions relatives à la configuration de la variable d'environnement.
Je lisais la page d'installation du manuel: https://www.rabbitmq.com/install-windows-manual.html
Définissez ERLANG_HOME sur l'emplacement actuel de votre installation Erlang, par exemple. C:\Program Files\erlx.x.x (chemin complet). Les fichiers de commandes RabbitMQ s'attendre à exécuter% ERLANG_HOME%\bin\erl.exe.
Sélectionnez Démarrer> Paramètres> Panneau de configuration> Système> Avancé> Variables d'environnement. Créez la variable d'environnement système ERLANG_HOME et définissez-le sur le chemin complet du répertoire dans lequel contient bin\erl.exe.
Pour une raison quelconque, l'installation automatique a attribué un nom de chemin incorrect à la variable ERLANG_HOME - voir l'image ci-dessous. J'ai simplement ajouté\bin à la fin.
J'ai eu un problème similaire sur ma machine Linux et je poste la réponse ici, car rabbitmq sous Windows peut gérer les choses de la même manière.
Mon message et ma solution: rabbtimqadmin - Impossible d'établir la connexion: [Errno -2] Nom ou service inconnu
Le problème principal était de changer le nom de serveur après la configuration de rabbitmq. Une fois installé, rabbitmq fait référence au nom du serveur, ce qui en fait une partie de sa configuration. Je peux voir que cela est un problème similaire sur Windows.
En bref, vous pouvez changer le nom du serveur pour qu'il redevienne celui que vous aviez lors de la première installation de rabbitmq ou vous pouvez ajouter un fichier rabbitmq-env.conf
. Je ne sais pas trop où il ira dans Windows, mais voici ce que donne Linux: https : //www.rabbitmq.com/man/rabbitmq-env.conf.5.man.html
Notez que sur Linux le nom du serveur était CaSe SeniTive! Ainsi, vous pouvez ou non avoir un problème similaire avec Windows.
J'espère que ça t'aide et bonne chance!
Si vous utilisez linux, essayez de modifier l’autorisation du dossier/var/lib/rabbitmq/mnesia.