rabbitmq测试方法

rabbitmq测试方法

1. 背景:mq选型切换

1.1 activemq使用现状

当前的集成框架中,选择使用ActiveMQ(通知服务)作为消息交换中间件。同时在基础组件中提供了ActiveMQ组件作为基础的MQ选型。即:

(1) 通知服务;(2)组件依赖类型:消息队列依赖(queue)

1.2 activemq使用中的不足

随着使用消息中间件的客户端增多,ActiveMQ单节点的性能逐渐乏力,问题:1)实施高可用、高可靠复杂度大;2)吞吐量等性能成为瓶颈,且扩容方案较重;3) 只能通过身份认证控制权限,而需求上将会需要更细粒度的topic级别的权限控制。即:产品层面难以满足高可用要求;业务层面难以满足性能要求;安全层面权限控制不足。

2.测试方法

2.1 rabbitmq状态验证

Ø mq状态查看

[root@HikvisionOS ~]# cd /opt/hikvision/web/components/rabbitmq.1/bin/rabbitmq/sbin/

[root@HikvisionOS sbin]# ./rabbitmqctl status

Ø mq停止

[root@HikvisionOS sbin]# ./rabbitmqctl stop

Ø 配置文件

/web/components/rabbitmq.1/bin/rabbitmq/etc/rabbitmq/rabbitmq-env.conf

Ø 数据文件

/web/components/rabbitmq.1/data/mnesia

Ø 证书

/web/components/rabbitmq.1/data/ssl_certificate

2.2 插件

Step1:开启插件

Ø mq插件列出

[root@HikvisionOS sbin]# ./rabbitmq-plugins list

Ø 插件安装(消息追踪插件)

[root@HikvisionOS sbin]# ./rabbitmq-plugins enable rabbitmq_tracing

Ø 插件卸载

[root@HikvisionOS sbin]# ./rabbitmq-plugins disable rabbitmq_tracing

Ø 消息追踪关闭

[root@HikvisionOS sbin]# ./rabbitmq-plugins disable rabbitmq_tracing

Step3:查看消息内容

消息将保存在添加的文件中,该文件可在上一步骤中的rabbitmq的web页面直接点击打开,或存储于服务器/var/tmp/rabbitmq-tracing路径下

Step4:消息解析

部分消息内容需要经过Base64 解码

2.3 自动化实现(python)

通过AMQP协议的Python客户端开发包:pika库,可以完成通过rabbitmq进行消息收发的任务及测试。

def message_send(topic, num, lasttime):
    # 获取运管配置文件中的notify配置信息
    mq_conf = conf().rbbitmq_conf()
    # 添加用户名和密码
    credentials = pika.PlainCredentials(mq_conf[0], mq_conf[1])
    # 配置连接参数
    connection = pika.BlockingConnection(
        pika.ConnectionParameters(host=mq_conf[2], port=int(mq_conf[3]),
                                  virtual_host='/', credentials=credentials))
    # 创建频道
    channel = connection.channel()

    # 声明交换机
    result = channel.exchange_declare(exchange='credentials', exchange_type='fanout')
    print(result)
    t = time()
    t_current = time()
    while t_current - t < lasttime:
        for i in range(num):
            message = json.dumps({'OrderId': "1000%s,%s" % (lasttime, i)})
            # 投递消息routing_key是队列名
            channel.basic_publish(exchange=topic, routing_key='python-test', body=message)
            print(message)
            t_current = time()  # current time

    # 关闭TCP连接
    connection.close()
def message_receive(topic):
    # 获取运管配置文件中的notify配置信息
    mq_conf = conf().rbbitmq_conf()
    # 添加用户名和密码
    credentials = pika.PlainCredentials(mq_conf[0], mq_conf[1])
    # 配置连接参数
    connection = pika.BlockingConnection(
        pika.ConnectionParameters(host=mq_conf[2], port=int(mq_conf[3]),
                                  virtual_host='/', credentials=credentials))
    # 创建频道
    channel = connection.channel()

    channel.exchange_declare(exchange=topic, exchange_type='fanout',
                             durable=True)
    # 这里不指定queue
    result = channel.queue_declare(queue='', exclusive=True)
    queue_name = result.method.queue

    # 队列和交换机绑定
    channel.queue_bind(exchange=topic, queue=queue_name)

    print(' [*] Waiting for logs. To exit press CTRL+C')

    def callback(ch, method, properties, body):
        print(result)
        print(" [x] %r" % body)

    channel.basic_consume(
        queue=queue_name, on_message_callback=callback, auto_ack=True)

    # 循环等待
    channel.start_consuming()

3.典型问题分享

3.1 异常场景

(1)磁盘空间不足,扩容后rabbitmq启动成功

(2)修改服务器hostname并重启生效,rabbitmq启动成功

为了测试 RabbitMQ 队列的功能和性能,可以使用多种方法和工具来实现。以下是一些常见的做法: ### 功能测试 功能测试主要关注的是队列是否能够正确地发送、接收以及处理消息。 1. **手动测试**:可以通过编写简单的生产者和消费者程序来验证基本的消息传递功能。例如,使用 Python 的 `pika` 库可以轻松地创建一个消费者脚本来监听特定队列,并打印出接收到的消息[^3]。 ```python import pika # 连接到RabbitMQ服务器 connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.10.101')) channel = connection.channel() # 声明队列,确保RabbitMQ中有一个名为'test_queue'的队列 channel.queue_declare(queue='test_queue', durable=True) # 定义回调函数来处理消息 def callback(ch, method, properties, body): print(f"Received {body.decode()}") # 消费队列中的消息,回调函数为callback channel.basic_consume(queue='test_queue', on_message_callback=callback, auto_ack=True) print("Waiting for messages. To exit press CTRL+C") # 开始监听消息 channel.start_consuming() ``` 2. **自动化测试**:利用单元测试框架(如 JUnit 对于 Java 应用)编写测试用例来验证消息的发送与接收逻辑是否正常工作。 ### 性能测试 性能测试则侧重于评估队列在高负载下的表现,包括吞吐量、延迟等指标。 1. **使用内置工具**:RabbitMQ 自带了一些管理插件和监控工具,可以帮助你了解当前系统的运行状态,比如消息堆积情况、连接数等。 2. **第三方工具**:RabbitMQ PerfTest 是一个专门为 RabbitMQ 设计的性能测试开源项目[^1]。它允许用户模拟不同的负载条件来测试 RabbitMQ 集群的表现,并且提供了丰富的配置选项以适应不同场景的需求。 3. **自定义压力测试**:根据实际业务需求定制化开发压力测试脚本或程序,通过大量并发发送和消费消息来模拟真实环境下的流量高峰。这通常涉及到调整诸如预取数量、自动重连时间间隔等参数[^5],以便观察系统在这些条件下的响应能力和稳定性。 4. **基准测试**:确定一组标准的工作负载作为基准,定期执行这些测试来比较不同版本或者配置更改前后系统的性能差异。 进行以上任何形式的测试时,请确保已经充分理解了被测系统的架构特点及其限制因素,这样才能更准确地设计测试案例并解释结果。此外,在实施大规模的压力测试之前,建议先从小规模开始逐步增加强度,以免对生产环境造成不必要的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值