У меня проблемы с подключением от gatling к кролику q с помощью gatling-amqp-plugin - PullRequest
0 голосов
/ 27 апреля 2020

Я совершенно тупик (и криптобитс scala c не помогает: -))

Я пытаюсь настроить тесты Гатлинга с использованием rabbitmq (ie I хочу отправить sh сообщений в кролика q и сколько времени потребуется, чтобы появиться во второй очереди) Я использую gatling-amqp-plugin , чтобы сделать это, так как gatling изначально не поддерживает amqp.

Чтобы сделать это более "интересным" для меня, я не кодирую в Scala и никогда не использовал gatling ....

Поэтому я взял "начало работы" project gatling-sbt-plugin-demo

Как только я убедился, что примеры нагрузочных тестов базы данных компьютера работают, я добавил новый пакет в проект и поместил пример PublishExample из проекта amqp (а также требуемый класс Utils)

У меня работает локальное изображение кролика docker ... это состав docker, который я использовал:

version: '3'

services:
  rabbi:
    image: rabbitmq:3.6-management
    hostname: "rabbi"
    expose:
      - "5672"
    ports:
      - "15672:15672"
      - "5672:5672"
    environment:
      RABBITMQ_DEFAULT_USER: "USER"
      RABBITMQ_DEFAULT_PASS: "PASS"
      RABBITMQ_DEFAULT_VHOST: "VOST"

Я тогда попытался запустить gatling, используя PublishExample

package rabbit

import io.gatling.core.Predef._
import io.gatling.core.structure.ScenarioBuilder
import ru.tinkoff.gatling.amqp.Predef._
import Utils._
import ru.tinkoff.gatling.amqp.protocol.AmqpProtocolBuilder

import scala.concurrent.duration._

class PublishExample extends Simulation {

  val amqpConf: AmqpProtocolBuilder = amqp
    .connectionFactory(
      rabbitmq
        .host("localhost")
        .port(5672)
        .username("USER")
        .password("PASS")
        .vhost("VOST")
    )
    .usePersistentDeliveryMode

  val scn: ScenarioBuilder = scenario("AMQP test")
    .feed(idFeeder)
    .exec(
      amqp("publish to exchange").publish
        .directExchange("test_queue", "test_key")
        .textMessage("Hello message - ${id}")
        .messageId("${id}")
        .priority(0)
        .property("testheader", "testvalue")
    )

  setUp(
    scn.inject(rampUsersPerSec(1) to 5 during (60 seconds), constantUsersPerSec(5) during (5 minutes))
  ).protocols(amqpConf)
    .maxDuration(10 minutes)

}

И это ошибка, которую я получаю

* 102 2 *

Что именно я здесь делаю? Я пробовал различные изменения в конфигурациях хоста / vhost / directExchange, но я не могу понять, что я делаю неправильно !!!

Кроме того, это журналы Rabbit, когда я запускаю этот код выше:

rabbi_1  |
rabbi_1  | =INFO REPORT==== 26-Apr-2020::21:12:13 ===
rabbi_1  | accepting AMQP connection <0.619.0> (172.20.0.1:56118 -> 172.20.0.2:5672)
rabbi_1  |
rabbi_1  | =INFO REPORT==== 26-Apr-2020::21:12:13 ===
rabbi_1  | connection <0.619.0> (172.20.0.1:56118 -> 172.20.0.2:5672): user 'USER' authenticated and granted access to vhost 'VOST'
rabbi_1  |
rabbi_1  | =WARNING REPORT==== 26-Apr-2020::21:12:14 ===
rabbi_1  | closing AMQP connection <0.619.0> (172.20.0.1:56118 -> 172.20.0.2:5672, vhost: 'VOST', user: 'USER'):
rabbi_1  | client unexpectedly closed TCP connection

Итак, я знаю, что «подключаюсь» к кролику

1 Ответ

0 голосов
/ 27 апреля 2020

Stacktrace не требует пояснений:

java.lang.NoSuchMethodError: java.lang.reflect.Field.canAccess(Ljava/lang/Object;)Z
        at ru.tinkoff.gatling.amqp.request.AmqpProtocolMessage.forceModify(AmqpProtocolMessage.scala:23)

Этот метод был введен в Java 9 , что означает, что этот сторонний плагин должен работать с Java 9+ ( в отличие от официальных компонентов Gatling, которые требуют Java 8 с 3.3.1).

...