代码之家  ›  专栏  ›  技术社区  ›  makome

针对gatling的jeanadrien/gatling mqtt协议插件的发布和订阅问题

  •  1
  • makome  · 技术社区  · 7 年前

    我用java实现了一个“服务器端”mqtt客户端(客户端与代理和数据库运行在同一个节点上)。客户端具有订阅主题“数字”中的数字的功能。在订阅主题中的数字后,客户端使用mongodb中的数字数据集进行读取。在从mongodb读取数据集后,客户端将数据集发布到主题“数据”上。

    MQTT-Box

    package mqtt
    
    import com.github.jeanadrien.gatling.mqtt.Predef._
    import io.gatling.core.Predef._
    import scala.concurrent.duration._
    
    
    
    class Mqtt extends Simulation {
    
    
      val mqttConf = mqtt
        // MQTT broker
        .host("tcp://localhost:1883")
    
    
      val scn = scenario("MQTT")
          .exec(connect)
          .exec(subscribe("data").qosExactlyOnce)
          .exec(publish("number", "10").qosExactlyOnce)
    
      setUp(scn.inject(atOnceUsers(1))).protocols(mqttConf)
    
    
    }
    

    在运行测试时,我出现以下错误:

    模拟mqtt。Mqtt已启动。。。10: 15:37.310[错误] 类型类java的强制转换值10。lang.串入类[B]

    但我的脚本与git中的examle类似: https://github.com/jeanadrien/gatling-mqtt-protocol/blob/master/src/test/scala/MqttScenarioExample.scala

    可能问题是我必须转换[字节]数组中的字符串?!

    此外,我想检查主题“数据”的订阅结果。与我的websocket脚本类似:

    .check(wsAwait.within(10 seconds).until(1).regex(""".*"data_id" : 100.0.*"""))
    

    如何在mqtt中使用检查?

    1 回复  |  直到 7 年前
        1
  •  1
  •   makome    7 年前

    我解决了我的问题。该插件仅支持二进制数据,不支持字符串。 因此,我在代码中添加了以下内容:

      val message = "10"
      val msg = message.getBytes("utf-8")
    

    现在我使用“msg”作为publish方法的参数,它可以工作了!