如何测试与RabbitMQ服务器的连接?

10
我有以下问题:需要测试连接到运行在AMQ协议上的RabbitMQ服务器,并且我需要使用CMD或类似的方式进行测试,以便我可以从脚本中执行命令。我不知道是否可能,我在互联网上找到的唯一一件事是通过HTTP测试连接,但对我来说不起作用。简而言之,我需要一个cmd命令来测试使用AMQP的RabbitMQ服务器的连接。
我希望有人能理解我的问题,也许我没有描述好。
提前感谢您的回复。

你看过来自 https://github.com/mariuszwojcik/RabbitMQTools 的 Get-RabbitMQConnection 吗?现代的机器运行 cmd.exe 也可以拥有(可能已经拥有)powershell.exe。 - lit
您提供的这篇文章确实让我有所进展,因为我之前不知道这个代码库,但这并不是我问题的真正解决方案。 - Petar
在cmd.exe shell中,命令powershell -NoProfile -Command "Get-RabbitMQConnection ..."能否确定RabbitMQ是否正常工作? - lit
尝试执行您在此处提供的命令后,我遇到了这个错误: `Get-RabbitMQConnection:无法识别术语“Get-RabbitMQConnection”为cmdlet、function、script file或可操作的程序的名称。请检查名称的拼写,或者如果已包含路径,请验证路径是否正确,然后重试。 在行:1字符:1
  • Get-RabbitMQConnection
  • + CategoryInfo : ObjectNotFound: (Get-RabbitMQConnection:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException`
- Petar
你安装了 RabbitMQTools 吗?请查看该页面上的 入门指南 部分。 - lit
我找到了问题所在,而且有点儿傻。你需要先建立连接,但在本地机器上这有点棘手,简单来说,你需要模拟两个脚本之间的通信。然后,使用命令 rabbitmqctl list_connections 就可以轻松列出连接。我已经完成了这个过程,而没有使用你提到的任何 RabbitMQ 工具。 - Petar
3个回答

7

我找到了另一种使用netcat/telnet验证基本tcp连接的方法。

nc hostname 5672

或者

telnet hostname 5672

输入 HELO 并按回车键 4 次。

您应该会看到一个 AMQP 的响应。

示例:

> nc rabbitserver 5672
HELO



AMQP

在这里提到的其他工具将会验证客户端和服务器之间更深层次的兼容性,以及验证其他协议。如果你只需要确保客户端和服务器之间防火墙中的5672端口是开放的,那么这个基本测试就足够了。

2

我找到了问题所在,而且这个问题有点儿傻。首先需要建立连接,但在本地机器上做起来有些棘手。简单来说,你需要模拟通信,例如在这种情况下,模拟两个脚本之间的通信。然后,你可以使用以下命令轻松列出连接:

rabbitmqctl list_connections

很高兴听到你找到了答案。RabbitMQTools可能仍然有用。 - lit

1
这是我称之为全栈测试脚本的内容。
#!/usr/bin/env python3
# Check connection to the RabbitMQ server

# import parser for command-line options
import argparse
# import a pure-Python implementation of the AMQP 0-9-1 
import pika
import ssl

# define and parse command-line options
parser = argparse.ArgumentParser(description='Check connection to RabbitMQ server')
parser.add_argument('--server', required=True, help='Define RabbitMQ server')
parser.add_argument('--virtual_host', default='/', help='Define virtual host')
parser.add_argument('--ssl', action='store_true', help='Enable SSL (default: %(default)s)')
parser.add_argument('--port', type=int, default=5672, help='Define port (default: %(default)s)')
parser.add_argument('--username', default='guest', help='Define username (default: %(default)s)')
parser.add_argument('--password', default='guest', help='Define password (default: %(default)s)')
args = vars(parser.parse_args())

# set amqp credentials
credentials = pika.PlainCredentials(args['username'], args['password'])

if args['ssl']:
    context = ssl.create_default_context()
    ssl_options = pika.SSLOptions(context, args['server'])
else:
    ssl_options = None

parameters = pika.ConnectionParameters(host=args['server'], port=args['port'], virtual_host=args['virtual_host'], credentials=credentials, ssl_options=ssl_options)

# try to establish connection and check its status
try:
  connection = pika.BlockingConnection(parameters)
  if connection.is_open:
    print('OK')
    connection.close()
    exit(0)
except Exception as error:
  print('Error:', error.__class__.__name__)
  exit(1)

原始的IDEA和脚本:https://sleeplessbeastie.eu/2017/07/10/how-to-check-connection-to-the-rabbitmq-message-broker/ 我只是调整了上述脚本,使其适用于更新的"pika" ssl参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接