Giter Site home page Giter Site logo

tinkoff / gatling-amqp-plugin Goto Github PK

View Code? Open in Web Editor NEW
32.0 32.0 20.0 150 KB

Plugin for support performance testing with AMQP in Gatling (3.7.x)

License: Apache License 2.0

Scala 65.32% Java 27.51% Kotlin 7.16%
amqp gatling performance scala

gatling-amqp-plugin's People

Contributors

aiterekhov avatar daylikon avatar ehmkah avatar github-actions[bot] avatar jigarkhwar avatar maksimall89 avatar o-pavel avatar red-bashmak avatar rene-ffs avatar scala-steward avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

gatling-amqp-plugin's Issues

how to run these tests

Can u pls add details to run these files? I am new to gatling. trying to run PublishExample.scala

MessageMatcher.prepareRequest not used

Due this bug it's not possible to match response with request when using correlationId for matching.
In logs there were a lot of messages about matchId is null. Is causes to show random results during simulation run because of matchId always null.

Include bytesMessage in PublishDslBuilderMessage.java

Sending byte messages to Rabbitmq/amqp is possible in scala, but missing from the java wrapper.

Please include bytesMessage in PublishDslBuilderMessage.java, wrapping ru.tinkoff.gatling.amqp.request.PublishDslBuilderMessage.bytesMessage.

Unable to set queue properties while publishing

Hi,

I am using your plugin to publish amqp messages to an existing queue. But the test fails to publish with the error

Wrapped by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'x-expi
res' for queue 'xxxxx-xxxxx-xxxxxx' in vhost '/': received none but current is the value '600000' of
 type 'long', class-id=50, method-id=10)

I assume that this if failing because i am unable to set the queue properties
image

Below is my test

class PublishExample extends Simulation {

  val source: BufferedSource = Source.fromFile("./sport/icehockey.json")
  val payload: String = try source.mkString finally source.close()

  val amqpConf: AmqpProtocolBuilder = amqp
    .connectionFactory(
      rabbitmq
        .host("xxx-xxx")
        .port(5672)
        .vhost("/")
        .username("guest")
        .password("guest")
    ).replyTimeout(600000)
    .usePersistentDeliveryMode

  val cfProps: java.util.Map[String,AnyRef] = new java.util.HashMap[String,AnyRef]
  cfProps.put("'x-expires","600000")

  amqpConf.connectionFactory.setClientProperties(cfProps)

 val props: scala.collection.immutable.Map[String,String] =
    Map("content-type" -> "application/json",
      "contentEncoding" -> "utf-8",
      "[SerializerType]" -> "Newtonsoft.Json.JsonConverter"

  val scn: ScenarioBuilder = scenario("AMQP test")
    .feed(idFeeder)
    .exec(
      amqp("publish to exchange").publish
        .queueExchange("xxxx-xxxx-xxxx-xxxx")  .bytesMessage(payload.getBytes("UTF-8"))
        .property("x-expires",600000)
        .headers(props)
    )

  setUp(
    scn.inject(rampUsers(10) during (10 seconds))
  ).protocols(amqpConf)
    .maxDuration(10 minutes)

}

Could you please help ?

SSL connection to Rabbit

It is common that the connection is secured.

I do not see an option to establish secured connection.

In other libraries it is dane by just setting an extra flag (of course Rabbit use other port for secured connection and ip address should be raplaced by domain address).

Known issues for requestReply?

I use this plugin for requestReply. Publishing for messages works but not all received messages are detected correctly.

I use the matchByMessage and have an implementation which extracts the id of the sent and received message. I looks like that message is called with each message but at the end of the test there are always more or less active messages. Are there any known issues that messages are received to early before they are tracked as sent?

[####################################################################------] 93%
          waiting: 0      / active: 7      / done: 93    
================================================================================

If a messages could not be matched than the test should output failed counter

If I see the following before the tests finishes
waiting: 0 / active: 10 / done: 230

Than the test result looks like

---- Response Time Distribution ------------------------------------------------
> t < 800 ms                                           230 (100%)
> 800 ms < t < 1200 ms                                   0 (  0%)
> t > 1200 ms                                            0 (  0%)
> failed                                                 0 (  0%)

But it should look like (and reflect that some messages have not been processed)

---- Response Time Distribution ------------------------------------------------
> t < 800 ms                                           230 (96%)
> 800 ms < t < 1200 ms                                   0 (  0%)
> t > 1200 ms                                            0 (  0%)
> failed                                                 10 ( 4%)

Can you help me with AMQPS?

Hellou,
Im new in Gatling and Scala at all. Can you please show me how to create connectionFactory to AMQPS?
Now I got error Connection reset
Many thanks

my code:
val amqpConf: AmqpProtocolBuilder = amqp .connectionFactory( rabbitmq .host("mq.xxx.xxx.com") .port(5671) .vhost("/") .username("someUsername") .password("somePassword") ) .usePersistentDeliveryMode

Binding Multiple Queues

Is there any way to bind multiple queues in AmqpProtocolBuilder?

Requirement is to bind multiple queues (Request & Response) instead of declaring it.

Compatible with gatling 3.4.?

I want to load-test our system which is connected via RabbitMQ.Therefore I try this plugin and I am asking myself is this plugin comatible to gatling 3.4.0 or should I use an old version of gatling? If its not compatible are there any plans to make it compatible again?

I get the following exeption if I try this plugin with gatling 3.4.0

java.lang.NoSuchMethodError: io.gatling.core.CoreComponents.throttler()Lio/gatling/core/controller/throttle/Throttler;

Warning: I am neither a scala nor gatling expert.

How do I configure two messageBrokers

My supercool system reads from MessageBrokerA and writes to MessageBrokerB. How is it possible to use the plugin in a way that it uses MessageBrokerA for sending and MessageBroker B for receiving?

If I understand the provided example correct than its implicitly assumed that all queues and exchanges are hostet at the same MessageBroker.

Issue with headers in the examples

Hello,

When I try to run the tests in either of the examples, I get the following error

[error] found : String("testvalue")
[error] required: io.gatling.commons.validation.Validation[Map[String,String]]
[error] .headers(Map("testheader" -> "testvalue"))

Can you please assist?

Thanks,

Jairo

Request/Reply : send message in Exchange reply in multi exchange

Hey Guys,

I want to send one msg in exchange and I want to reply in multi queue
Any solution Please ?

Example :
val scn : ScenarioBuilder = scenario("scenario with multi reply")
.feed(correlationIds)
.exec(
amqp("test AMQ").requestReply
.directExchange("exchange1", "keyrouting1")
.replyExchange("queue 1")
.replyExchange("queue 2")
.bytesMessage(RawFileBody("file.json"))
.contentType("application/json")
.headers("action" -> "process", "correlationId" -> "${correlationId}")
.priority(0)
)

Thanks :)

Message id matching in request-reply

In the RequestReplyExample the id is injected in the message being sent.

But then the matching process starts and somehow the reply should contain the id as well. Lets say that the reply has a different message format.

For example this is the message sent:

{
  "x": 101
}

And this is the message received:

{
  "y": 101
}

In the builder you provide I can set the id for the message sent by using it inside the textMessage.

amqp("name").requestReply
        .topicExchange(name = "exchange-name, routingKey = "routing-key")
        .replyExchange("queue-name")
        .textMessage("{"x":#{id}}")
        .messageId("#{id}")

The message being sent is correct and the reply message is also delivered. But this message has some random generated id:

r.t.g.a.a.RequestReply - Message sent user=1 AMQPMessageID=101
r.t.g.a.c.TrackerPool - Message received AmqpMessageID=0aee5b62-cba1-1858-abe5-386b1ba4b412 matchId=0aee5b62-cba1-1858-abe5-386b1ba4b412

How can we parse the value of y in the reply message, in order to be used by the id matching algorithm?

Generating timestamps - Json file

@red-bashmak

Thank you :) I am able to publish the message using ElFileBody as below.

Really appreciate the reply. I am getting started with Gatling and facing an another issue. I have seeked help from community as well. It would be really helpful, if you can give some inputs.

package simulations

import io.gatling.core.Predef._
import io.gatling.core.structure.{ChainBuilder, ScenarioBuilder}
import ru.tinkoff.gatling.amqp.Predef._
import ru.tinkoff.gatling.amqp.protocol.AmqpProtocolBuilder

class PublishWithFeeeder extends Simulation{

val csvFeederVINNumber = csv("testData/vinNumber.csv").circular

val amqpConf: AmqpProtocolBuilder = amqp
.connectionFactory(rabbitmq
.host("hasty-whale.rmq.cloudamqp.com")
.port(5672)
.username("username")
.password("password")
.vhost("host"))
.declare(queue("measurement_data_hino_us_pilot_uat",autoDelete = false))

def publishMessageWithFeeder(): ChainBuilder ={
feed(csvFeederVINNumber)
.exec(amqp("publish to us_pilot_uat")
.publish
.queueExchange("measurement_data_hino_us_pilot_uat")
.textMessage(ElFileBody("testData/publish.json"))
.priority(0)
.contentType("application/json"))
.pause(1)
}

val scn: ScenarioBuilder = scenario("Message Publish with Feeder")
.exec(publishMessageWithFeeder())

setUp(
scn.inject(atOnceUsers(1))).protocols(amqpConf)
}

Issue Link : https://stackoverflow.com/questions/66950680/using-timestamp-in-json-file-in-gating
Description :

I have json file in below format

Scenario :

Publishing message into RabbitMQ using Gatling.
I have saved the json file in resource folder.
Passing json file using "ElFileBody" builder.
i have to get the current timestamp and increment current time accordingly in the downstream dapoints. Attached below ex
Could you please help in generating the timestamp, how can we increment/decrement the current timestamps by seconds/minutes/hours/days and pass directly in json file.

{
"series": {
"uid": "60329dd7-cc15-43ca-ac5d-6907126b017a",
"seriesName": "APP",
"valueType": "DOUBLE",
"description": "",
"signalCollectionId": "ed6a6744-32c7-4f96-969c-8e1bd1b26f41",
"sourceId": "70f15369-9ac0-4533-8f49-c7f0326a2a05",
"sourceName": "v7r2_J_ENG_DEC",
"unit": "%",
"protocol": "CAN_RAW",
"type": "SIGNAL",
"samplingRate": 1000
},
"dataPoints": [
{
"uniqueId": "34ad93e0-bdb3-4cbc-8354-ab59a808960f",
"timeStamp": "2021-03-15T13:13:01.111Z", //Current timestamp
"value": 0
},
{
"uniqueId": "f901ec1e-5fd5-4015-97ad-b14aadae17ff",
"timeStamp": "2021-03-15T13:13:11.111Z", //Current timestamp + 10 seconds
"value": 0
},
{
"uniqueId": "abc79341-2388-447c-8bd1-4671c791f9b9",
"timeStamp": "2021-03-15T13:13:21.111Z", //Current timestamp + 20 seconds
"value": 0
}
]
}

Thank you :)

Naveen.

How to cross check the message id in request and reply using check block

i tried the example provided (RequestReply)
But here it is not acknowledge the message response(hence failing the test), even though i can see all the messages are being consumed from the queue ( rep-queue-mq) by the test suite.
I am not sure what i am missing here, may be some additional check block.i think i miss some kind of comparison or protocol configuration here ( i tried to figure out whether id exists in response with jsonPath("$.id").exists, but its failing in runtime due to

type mismatch;
found : io.gatling.core.check.CheckBuilder[io.gatling.core.check.jsonpath.JsonPathCheckType,com.fasterxml.jackson.databind.JsonNode,String]
required: ru.tinkoff.gatling.amqp.AmqpCheck
(which expands to) io.gatling.core.check.Check[ru.tinkoff.gatling.amqp.request.AmqpProtocolMessage]
bodyString.exists,jsonPath("$.id").exists)

I am fairly new to scala and gatling, so i am not exactly sure of what is causing the issue( seems the plugin is expecting some other type expression: check(bodyString.exists,jsonPath("$.id").exists)).

class RequestReply extends Simulation{

val amqpConf: AmqpProtocolBuilder = amqp
.connectionFactory(
rabbitmq
.host("localhost")
.port(9081)
.username("usr")
.password("pwd")
.vhost("/vhost")
)
.replyTimeout(60000)
.consumerThreadsCount(8)
.matchByMessageId
.usePersistentDeliveryMode

val scn: ScenarioBuilder = scenario("AMQP")
.feed(idFeeder) /
.exec(
amqp("Consume Publish Test").requestReply
.directExchange("direct.exchange", "direcs.rk")
.replyExchange("rep-queue-mq") // here i given the queue name where the message is published by the application after processing (this queue is another exchange)
.textMessage("{"id":"${id}","message":"testmessage"}")
.messageId("${id}")
.priority(0)
.property("content_type", "application/json")
.check(
bodyString.exists)

Note : I tried to publish and consume from the same queue ..its working there.( tried to print the response in this case and found the below output as expected.

Response body:
{"id":"10020","msg":"test"}
Response body:
{"id":"10021","msg":"test"}
Response body:
{"id":"10022","msg":"test"}

.check(
bodyString.exists,bodyString.saveAs("BODY"))
).exec({session =>
val response = session("BODY").as[String]
println(s"Response body: \n$response")
session
})

AmqpConnectionPool should check whether connection is open

In the file https://github.com/TinkoffCreditSystems/gatling-amqp-plugin/blob/master/src/main/scala/ru/tinkoff/gatling/amqp/client/AmqpConnectionPool.scala there has been the method defined

 def close(): Unit = {
    if (connection != null) {
      channelPool.close()
      connection.close()
    }
  }

If connection has already been closed an com.rabbitmq.client.AlreadyClosedException: is thrown from rabbitmq client lib.

It would be better to check with if connection has already been closed before close is called.

Any option to add Topic support for exchange?

Hello, Is there any option to add Topic support in your AMQP library?
I'd need to use both, topic and direct but I'm jjust realized that your lib does not have support for Topic :(.
Thx.

Issue while publishing the message to RabbitMQ

Hi @red-bashmak.. thank you for the plugin.

i have created a simple scala project using Maven and added dependency for the plugin as per the link below,
https://search.maven.org/artifact/ru.tinkoff/gatling-amqp-plugin_2.13

below is my code snippet for publishing the message into our queue,


package simulations

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

class HinoRabbitMQPublish extends Simulation{

val amqpConf: AmqpProtocolBuilder = amqp
.connectionFactory(
rabbitmq
.host("hasty-whale.rmq.cloudamqp.com")
.port(5672)
.username("******")
.password("
")
.vhost("********************")
)
.usePersistentDeliveryMode
.declare(queue("measurement_data_hino_us_pilot_uat"))

val scn: ScenarioBuilder = scenario("AMQP test")
.exec(
amqp("publish to us_pilot_uat")
.publish
.queueExchange("measurement_data_hino_us_pilot_uat")
.textMessage("Hello message - ${id}")
.messageId("${id}")
.priority(0)
)

setUp(
scn.inject(atOnceUsers(1))).protocols(amqpConf)
}


i am receiving below error, while running the script,


"C:\Users\Naveen Kumar.jdks\openjdk-15.0.2\bin\java.exe" -javaagent:F:\Incture\Performance\Software\IDE\ideaIC-2020.3.3.win\lib\idea_rt.jar=60454:F:\Incture\Performance\Software\IDE\ideaIC-2020.3.3.win\bin -Dfile.encoding=UTF-8 -classpath "C:\Users\Naveen Kumar\IdeaProjects\hino_performance\target\test-classes;C:\Users\Naveen Kumar.ivy2\cache\org.scala-lang\scala-library\jars\scala-library-2.13.5.jar;C:\Users\Naveen Kumar.ivy2\cache\org.scala-lang\scala-reflect\jars\scala-reflect-2.13.5.jar;C:\Users\Naveen Kumar.ivy2\cache\org.scala-lang\scala-library\srcs\scala-library-2.13.5-sources.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\highcharts\gatling-charts-highcharts\3.5.1\gatling-charts-highcharts-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\org\scala-lang\scala-library\2.13.3\scala-library-2.13.3.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\gatling-app\3.5.1\gatling-app-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\gatling-core\3.5.1\gatling-core-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\gatling-commons\3.5.1\gatling-commons-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\gatling-commons-shared\3.5.1\gatling-commons-shared-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\org\scala-lang\scala-reflect\2.13.3\scala-reflect-2.13.3.jar;C:\Users\Naveen Kumar.m2\repository\io\suzaku\boopickle_2.13\1.3.3\boopickle_2.13-1.3.3.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\gatling-commons-shared-unstable\3.5.1\gatling-commons-shared-unstable-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\org\typelevel\spire-macros_2.13\0.17.0\spire-macros_2.13-0.17.0.jar;C:\Users\Naveen Kumar.m2\repository\com\typesafe\scala-logging\scala-logging_2.13\3.9.2\scala-logging_2.13-3.9.2.jar;C:\Users\Naveen Kumar.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Naveen Kumar.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\gatling-jsonpath\3.5.1\gatling-jsonpath-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\com\typesafe\akka\akka-slf4j_2.13\2.6.11\akka-slf4j_2.13-2.6.11.jar;C:\Users\Naveen Kumar.m2\repository\org\simpleflatmapper\lightning-csv\8.2.3\lightning-csv-8.2.3.jar;C:\Users\Naveen Kumar.m2\repository\org\simpleflatmapper\sfm-util\8.2.3\sfm-util-8.2.3.jar;C:\Users\Naveen Kumar.m2\repository\com\github\ben-manes\caffeine\caffeine\2.8.8\caffeine-2.8.8.jar;C:\Users\Naveen Kumar.m2\repository\org\checkerframework\checker-qual\3.8.0\checker-qual-3.8.0.jar;C:\Users\Naveen Kumar.m2\repository\com\google\errorprone\error_prone_annotations\2.4.0\error_prone_annotations-2.4.0.jar;C:\Users\Naveen Kumar.m2\repository\io\pebbletemplates\pebble\3.1.4\pebble-3.1.4.jar;C:\Users\Naveen Kumar.m2\repository\org\unbescape\unbescape\1.1.6.RELEASE\unbescape-1.1.6.RELEASE.jar;C:\Users\Naveen Kumar.m2\repository\org\scala-lang\modules\scala-parser-combinators_2.13\1.1.2\scala-parser-combinators_2.13-1.1.2.jar;C:\Users\Naveen Kumar.m2\repository\com\github\scopt\scopt_2.13\3.7.1\scopt_2.13-3.7.1.jar;C:\Users\Naveen Kumar.m2\repository\io\netty\netty-handler\4.1.58.Final\netty-handler-4.1.58.Final.jar;C:\Users\Naveen Kumar.m2\repository\io\netty\netty-resolver\4.1.58.Final\netty-resolver-4.1.58.Final.jar;C:\Users\Naveen Kumar.m2\repository\com\softwaremill\quicklens\quicklens_2.13\1.6.1\quicklens_2.13-1.6.1.jar;C:\Users\Naveen Kumar.m2\repository\net\sf\saxon\Saxon-HE\10.3\Saxon-HE-10.3.jar;C:\Users\Naveen Kumar.m2\repository\org\jodd\jodd-lagarto\6.0.3\jodd-lagarto-6.0.3.jar;C:\Users\Naveen Kumar.m2\repository\org\jodd\jodd-util\6.0.0\jodd-util-6.0.0.jar;C:\Users\Naveen Kumar.m2\repository\io\burt\jmespath-jackson\0.5.0\jmespath-jackson-0.5.0.jar;C:\Users\Naveen Kumar.m2\repository\io\burt\jmespath-core\0.5.0\jmespath-core-0.5.0.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\gatling-http\3.5.1\gatling-http-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\gatling-http-client\3.5.1\gatling-http-client-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\gatling-netty-util\3.5.1\gatling-netty-util-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\io\netty\netty-handler-proxy\4.1.58.Final\netty-handler-proxy-4.1.58.Final.jar;C:\Users\Naveen Kumar.m2\repository\io\netty\netty-codec-socks\4.1.58.Final\netty-codec-socks-4.1.58.Final.jar;C:\Users\Naveen Kumar.m2\repository\io\netty\netty-resolver-dns\4.1.58.Final\netty-resolver-dns-4.1.58.Final.jar;C:\Users\Naveen Kumar.m2\repository\io\netty\netty-codec-dns\4.1.58.Final\netty-codec-dns-4.1.58.Final.jar;C:\Users\Naveen Kumar.m2\repository\io\netty\netty-transport-native-epoll\4.1.58.Final\netty-transport-native-epoll-4.1.58.Final-linux-x86_64.jar;C:\Users\Naveen Kumar.m2\repository\io\netty\netty-transport-native-unix-common\4.1.58.Final\netty-transport-native-unix-common-4.1.58.Final.jar;C:\Users\Naveen Kumar.m2\repository\io\netty\netty-codec-http2\4.1.58.Final\netty-codec-http2-4.1.58.Final.jar;C:\Users\Naveen Kumar.m2\repository\io\netty\netty-tcnative-boringssl-static\2.0.36.Final\netty-tcnative-boringssl-static-2.0.36.Final.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\gatling-jms\3.5.1\gatling-jms-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\javax\jms\javax.jms-api\2.0.1\javax.jms-api-2.0.1.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\gatling-jdbc\3.5.1\gatling-jdbc-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\gatling-redis\3.5.1\gatling-redis-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\net\debasishg\redisclient_2.13\3.30\redisclient_2.13-3.30.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\gatling-graphite\3.5.1\gatling-graphite-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\org\hdrhistogram\HdrHistogram\2.1.12\HdrHistogram-2.1.12.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\gatling-charts\3.5.1\gatling-charts-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\com\tdunning\t-digest\3.1\t-digest-3.1.jar;C:\Users\Naveen Kumar.m2\repository\io\gatling\gatling-recorder\3.5.1\gatling-recorder-3.5.1.jar;C:\Users\Naveen Kumar.m2\repository\org\scala-lang\modules\scala-swing_2.13\3.0.0\scala-swing_2.13-3.0.0.jar;C:\Users\Naveen Kumar.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.12.1\jackson-databind-2.12.1.jar;C:\Users\Naveen Kumar.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.12.1\jackson-annotations-2.12.1.jar;C:\Users\Naveen Kumar.m2\repository\com\fasterxml\jackson\core\jackson-core\2.12.1\jackson-core-2.12.1.jar;C:\Users\Naveen Kumar.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.68\bcpkix-jdk15on-1.68.jar;C:\Users\Naveen Kumar.m2\repository\org\bouncycastle\bcprov-jdk15on\1.68\bcprov-jdk15on-1.68.jar;C:\Users\Naveen Kumar.m2\repository\io\netty\netty-codec-http\4.1.58.Final\netty-codec-http-4.1.58.Final.jar;C:\Users\Naveen Kumar.m2\repository\io\netty\netty-common\4.1.58.Final\netty-common-4.1.58.Final.jar;C:\Users\Naveen Kumar.m2\repository\io\netty\netty-buffer\4.1.58.Final\netty-buffer-4.1.58.Final.jar;C:\Users\Naveen Kumar.m2\repository\io\netty\netty-transport\4.1.58.Final\netty-transport-4.1.58.Final.jar;C:\Users\Naveen Kumar.m2\repository\io\netty\netty-codec\4.1.58.Final\netty-codec-4.1.58.Final.jar;C:\Users\Naveen Kumar.m2\repository\com\typesafe\akka\akka-actor_2.13\2.6.11\akka-actor_2.13-2.6.11.jar;C:\Users\Naveen Kumar.m2\repository\com\typesafe\config\1.4.0\config-1.4.0.jar;C:\Users\Naveen Kumar.m2\repository\org\scala-lang\modules\scala-java8-compat_2.13\0.9.0\scala-java8-compat_2.13-0.9.0.jar;C:\Users\Naveen Kumar.m2\repository\ru\tinkoff\gatling-amqp-plugin_2.13\0.5.0\gatling-amqp-plugin_2.13-0.5.0.jar;C:\Users\Naveen Kumar.m2\repository\com\rabbitmq\amqp-client\5.11.0\amqp-client-5.11.0.jar;C:\Users\Naveen Kumar.m2\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;C:\Users\Naveen Kumar.m2\repository\org\apache\commons\commons-pool2\2.9.0\commons-pool2-2.9.0.jar;C:\Users\Naveen Kumar.m2\repository\com\eatthepath\fast-uuid\0.1\fast-uuid-0.1.jar" Engine
14:10:40.900 [main] INFO io.gatling.core.config.GatlingConfiguration$ - Gatling will try to use 'gatling.conf' as custom config file.
14:10:41.693 [GatlingSystem-akka.actor.default-dispatcher-4] INFO akka.event.slf4j.Slf4jLogger - Slf4jLogger started
14:10:42.185 [main] DEBUG io.netty.util.internal.logging.InternalLoggerFactory - Using SLF4J as the default logging framework
14:10:42.323 [main] DEBUG io.netty.channel.MultithreadEventLoopGroup - -Dio.netty.eventLoopThreads: 16
14:10:42.340 [main] DEBUG io.netty.util.internal.InternalThreadLocalMap - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
14:10:42.340 [main] DEBUG io.netty.util.internal.InternalThreadLocalMap - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
14:10:42.349 [main] DEBUG io.netty.channel.nio.NioEventLoop - -Dio.netty.noKeySetOptimization: false
14:10:42.349 [main] DEBUG io.netty.channel.nio.NioEventLoop - -Dio.netty.selectorAutoRebuildThreshold: 512
14:10:42.367 [main] DEBUG io.netty.util.internal.PlatformDependent - Platform: Windows
14:10:42.369 [main] DEBUG io.netty.util.internal.PlatformDependent0 - -Dio.netty.noUnsafe: false
14:10:42.369 [main] DEBUG io.netty.util.internal.PlatformDependent0 - Java version: 15
14:10:42.370 [main] DEBUG io.netty.util.internal.PlatformDependent0 - sun.misc.Unsafe.theUnsafe: available
14:10:42.371 [main] DEBUG io.netty.util.internal.PlatformDependent0 - sun.misc.Unsafe.copyMemory: available
14:10:42.371 [main] DEBUG io.netty.util.internal.PlatformDependent0 - java.nio.Buffer.address: available
14:10:42.374 [main] DEBUG io.netty.util.internal.PlatformDependent0 - direct buffer constructor: unavailable
java.lang.UnsupportedOperationException: Reflective setAccessible(true) disabled
at io.netty.util.internal.ReflectionUtil.trySetAccessible(ReflectionUtil.java:31)
at io.netty.util.internal.PlatformDependent0$4.run(PlatformDependent0.java:238)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:312)
at io.netty.util.internal.PlatformDependent0.(PlatformDependent0.java:232)
at io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:293)
at io.netty.util.internal.PlatformDependent.(PlatformDependent.java:92)
at io.netty.channel.nio.NioEventLoop.newTaskQueue0(NioEventLoop.java:279)
at io.netty.channel.nio.NioEventLoop.newTaskQueue(NioEventLoop.java:150)
at io.netty.channel.nio.NioEventLoop.(NioEventLoop.java:138)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:146)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:37)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.(MultithreadEventExecutorGroup.java:84)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.(MultithreadEventExecutorGroup.java:58)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.(MultithreadEventExecutorGroup.java:47)
at io.netty.channel.MultithreadEventLoopGroup.(MultithreadEventLoopGroup.java:59)
at io.netty.channel.nio.NioEventLoopGroup.(NioEventLoopGroup.java:86)
at io.netty.channel.nio.NioEventLoopGroup.(NioEventLoopGroup.java:81)
at io.netty.channel.nio.NioEventLoopGroup.(NioEventLoopGroup.java:68)
at io.gatling.netty.util.Transports.newEventLoopGroup(Transports.java:41)
at io.gatling.app.Gatling$.start(Gatling.scala:74)
at io.gatling.app.Gatling$.fromMap(Gatling.scala:40)
at Engine$.delayedEndpoint$Engine$1(Engine.scala:11)
at Engine$delayedInit$body.apply(Engine.scala:4)
at scala.Function0.apply$mcV$sp(Function0.scala:39)
at scala.Function0.apply$mcV$sp$(Function0.scala:39)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:17)
at scala.App.$anonfun$main$1(App.scala:76)
at scala.App.$anonfun$main$1$adapted(App.scala:76)
at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:563)
at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:561)
at scala.collection.AbstractIterable.foreach(Iterable.scala:919)
at scala.App.main(App.scala:76)
at scala.App.main$(App.scala:74)
at Engine$.main(Engine.scala:4)
at Engine.main(Engine.scala)
14:10:42.376 [main] DEBUG io.netty.util.internal.PlatformDependent0 - java.nio.Bits.unaligned: available, true
14:10:42.377 [main] DEBUG io.netty.util.internal.PlatformDependent0 - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable
java.lang.IllegalAccessException: class io.netty.util.internal.PlatformDependent0$6 cannot access class jdk.internal.misc.Unsafe (in module java.base) because module java.base does not export jdk.internal.misc to unnamed module @5a955565
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:385)
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:693)
at java.base/java.lang.reflect.Method.invoke(Method.java:556)
at io.netty.util.internal.PlatformDependent0$6.run(PlatformDependent0.java:352)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:312)
at io.netty.util.internal.PlatformDependent0.(PlatformDependent0.java:343)
at io.netty.util.internal.PlatformDependent.isAndroid(PlatformDependent.java:293)
at io.netty.util.internal.PlatformDependent.(PlatformDependent.java:92)
at io.netty.channel.nio.NioEventLoop.newTaskQueue0(NioEventLoop.java:279)
at io.netty.channel.nio.NioEventLoop.newTaskQueue(NioEventLoop.java:150)
at io.netty.channel.nio.NioEventLoop.(NioEventLoop.java:138)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:146)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:37)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.(MultithreadEventExecutorGroup.java:84)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.(MultithreadEventExecutorGroup.java:58)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.(MultithreadEventExecutorGroup.java:47)
at io.netty.channel.MultithreadEventLoopGroup.(MultithreadEventLoopGroup.java:59)
at io.netty.channel.nio.NioEventLoopGroup.(NioEventLoopGroup.java:86)
at io.netty.channel.nio.NioEventLoopGroup.(NioEventLoopGroup.java:81)
at io.netty.channel.nio.NioEventLoopGroup.(NioEventLoopGroup.java:68)
at io.gatling.netty.util.Transports.newEventLoopGroup(Transports.java:41)
at io.gatling.app.Gatling$.start(Gatling.scala:74)
at io.gatling.app.Gatling$.fromMap(Gatling.scala:40)
at Engine$.delayedEndpoint$Engine$1(Engine.scala:11)
at Engine$delayedInit$body.apply(Engine.scala:4)
at scala.Function0.apply$mcV$sp(Function0.scala:39)
at scala.Function0.apply$mcV$sp$(Function0.scala:39)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:17)
at scala.App.$anonfun$main$1(App.scala:76)
at scala.App.$anonfun$main$1$adapted(App.scala:76)
at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:563)
at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:561)
at scala.collection.AbstractIterable.foreach(Iterable.scala:919)
at scala.App.main(App.scala:76)
at scala.App.main$(App.scala:74)
at Engine$.main(Engine.scala:4)
at Engine.main(Engine.scala)
14:10:42.377 [main] DEBUG io.netty.util.internal.PlatformDependent0 - java.nio.DirectByteBuffer.(long, int): unavailable
14:10:42.377 [main] DEBUG io.netty.util.internal.PlatformDependent - sun.misc.Unsafe: available
14:10:42.393 [main] DEBUG io.netty.util.internal.PlatformDependent - maxDirectMemory: 2120220672 bytes (maybe)
14:10:42.394 [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.tmpdir: C:\Users\NAVEEN~1\AppData\Local\Temp (java.io.tmpdir)
14:10:42.394 [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.bitMode: 64 (sun.arch.data.model)
14:10:42.395 [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.maxDirectMemory: -1 bytes
14:10:42.396 [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.uninitializedArrayAllocationThreshold: -1
14:10:42.397 [main] DEBUG io.netty.util.internal.CleanerJava9 - java.nio.ByteBuffer.cleaner(): available
14:10:42.397 [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.noPreferDirect: false
14:10:42.406 [main] DEBUG io.netty.util.internal.PlatformDependent - org.jctools-core.MpscChunkedArrayQueue: available
Choose a simulation number:
[0] simulations.HinoRabbitMQPublish
[1] simulations.TestAPI
0
Select run description (optional)

14:10:51.991 [main] ERROR io.gatling.app.Gatling$ - Run crashed
java.io.IOException: null
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:129)
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:125)
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:147)
at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:968)
at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.queueDeclare(AutorecoveringChannel.java:343)
at ru.tinkoff.gatling.amqp.protocol.AmqpProtocol$$anon$1$$anonfun$runInitAction$1.applyOrElse(AmqpProtocol.scala:64)
at ru.tinkoff.gatling.amqp.protocol.AmqpProtocol$$anon$1$$anonfun$runInitAction$1.applyOrElse(AmqpProtocol.scala:60)
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:35)
at scala.collection.immutable.List.foreach(List.scala:333)
at ru.tinkoff.gatling.amqp.protocol.AmqpProtocol$$anon$1.$anonfun$newComponents$1(AmqpProtocol.scala:77)
at io.gatling.core.protocol.ProtocolComponentsRegistry.comps$1(Protocol.scala:71)
at io.gatling.core.protocol.ProtocolComponentsRegistry.$anonfun$components$4(Protocol.scala:73)
at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:454)
at io.gatling.core.protocol.ProtocolComponentsRegistry.components(Protocol.scala:73)
at ru.tinkoff.gatling.amqp.action.PublishBuilder.components(PublishBuilder.scala:14)
at ru.tinkoff.gatling.amqp.action.PublishBuilder.build(PublishBuilder.scala:18)
at io.gatling.core.structure.BuildAction.$anonfun$build$1(BuildAction.scala:28)
at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
at scala.collection.immutable.List.foldLeft(List.scala:79)
at io.gatling.core.structure.BuildAction.build(BuildAction.scala:27)
at io.gatling.core.structure.BuildAction.build$(BuildAction.scala:26)
at io.gatling.core.structure.ScenarioBuilder.build(StructureBuilder.scala:51)
at io.gatling.core.structure.PopulationBuilder.build(PopulationBuilder.scala:100)
at io.gatling.core.scenario.SimulationParams.buildScenario(Simulation.scala:170)
at io.gatling.core.scenario.SimulationParams.$anonfun$scenarios$1(Simulation.scala:174)
at scala.collection.immutable.List.map(List.scala:246)
at io.gatling.core.scenario.SimulationParams.scenarios(Simulation.scala:174)
at io.gatling.app.Runner.run0(Runner.scala:82)
at io.gatling.app.Runner.run(Runner.scala:52)
at io.gatling.app.Gatling$.start(Gatling.scala:80)
at io.gatling.app.Gatling$.fromMap(Gatling.scala:40)
at Engine$.delayedEndpoint$Engine$1(Engine.scala:11)
at Engine$delayedInit$body.apply(Engine.scala:4)
at scala.Function0.apply$mcV$sp(Function0.scala:39)
at scala.Function0.apply$mcV$sp$(Function0.scala:39)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:17)
at scala.App.$anonfun$main$1(App.scala:76)
at scala.App.$anonfun$main$1$adapted(App.scala:76)
at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:563)
at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:561)
at scala.collection.AbstractIterable.foreach(Iterable.scala:919)
at scala.App.main(App.scala:76)
at scala.App.main$(App.scala:74)
at Engine$.main(Engine.scala:4)
at Engine.main(Engine.scala)
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'auto_delete' for queue 'measurement_data_hino_us_pilot_uat' in vhost 'fdc97e13-563c-41b1-843b-1ecf7dbc62d3': received 'true' but current is 'false', class-id=50, method-id=10)
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66)
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36)
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:502)
at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:293)
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:141)
... 43 common frames omitted
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'auto_delete' for queue 'measurement_data_hino_us_pilot_uat' in vhost 'fdc97e13-563c-41b1-843b-1ecf7dbc62d3': received 'true' but current is 'false', class-id=50, method-id=10)
at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:517)
at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:341)
at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:182)
at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:114)
at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:739)
at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:47)
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:666)
at java.base/java.lang.Thread.run(Thread.java:832)
Exception in thread "main" java.io.IOException
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:129)
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:125)
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:147)
at com.rabbitmq.client.impl.ChannelN.queueDeclare(ChannelN.java:968)
at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.queueDeclare(AutorecoveringChannel.java:343)
at ru.tinkoff.gatling.amqp.protocol.AmqpProtocol$$anon$1$$anonfun$runInitAction$1.applyOrElse(AmqpProtocol.scala:64)
at ru.tinkoff.gatling.amqp.protocol.AmqpProtocol$$anon$1$$anonfun$runInitAction$1.applyOrElse(AmqpProtocol.scala:60)
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:35)
at scala.collection.immutable.List.foreach(List.scala:333)
at ru.tinkoff.gatling.amqp.protocol.AmqpProtocol$$anon$1.$anonfun$newComponents$1(AmqpProtocol.scala:77)
at io.gatling.core.protocol.ProtocolComponentsRegistry.comps$1(Protocol.scala:71)
at io.gatling.core.protocol.ProtocolComponentsRegistry.$anonfun$components$4(Protocol.scala:73)
at scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:454)
at io.gatling.core.protocol.ProtocolComponentsRegistry.components(Protocol.scala:73)
at ru.tinkoff.gatling.amqp.action.PublishBuilder.components(PublishBuilder.scala:14)
at ru.tinkoff.gatling.amqp.action.PublishBuilder.build(PublishBuilder.scala:18)
at io.gatling.core.structure.BuildAction.$anonfun$build$1(BuildAction.scala:28)
at scala.collection.LinearSeqOps.foldLeft(LinearSeq.scala:169)
at scala.collection.LinearSeqOps.foldLeft$(LinearSeq.scala:165)
at scala.collection.immutable.List.foldLeft(List.scala:79)
at io.gatling.core.structure.BuildAction.build(BuildAction.scala:27)
at io.gatling.core.structure.BuildAction.build$(BuildAction.scala:26)
at io.gatling.core.structure.ScenarioBuilder.build(StructureBuilder.scala:51)
at io.gatling.core.structure.PopulationBuilder.build(PopulationBuilder.scala:100)
at io.gatling.core.scenario.SimulationParams.buildScenario(Simulation.scala:170)
at io.gatling.core.scenario.SimulationParams.$anonfun$scenarios$1(Simulation.scala:174)
at scala.collection.immutable.List.map(List.scala:246)
at io.gatling.core.scenario.SimulationParams.scenarios(Simulation.scala:174)
at io.gatling.app.Runner.run0(Runner.scala:82)
at io.gatling.app.Runner.run(Runner.scala:52)
at io.gatling.app.Gatling$.start(Gatling.scala:80)
at io.gatling.app.Gatling$.fromMap(Gatling.scala:40)
at Engine$.delayedEndpoint$Engine$1(Engine.scala:11)
at Engine$delayedInit$body.apply(Engine.scala:4)
at scala.Function0.apply$mcV$sp(Function0.scala:39)
at scala.Function0.apply$mcV$sp$(Function0.scala:39)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:17)
at scala.App.$anonfun$main$1(App.scala:76)
at scala.App.$anonfun$main$1$adapted(App.scala:76)
at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:563)
at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:561)
at scala.collection.AbstractIterable.foreach(Iterable.scala:919)
at scala.App.main(App.scala:76)
at scala.App.main$(App.scala:74)
at Engine$.main(Engine.scala:4)
at Engine.main(Engine.scala)
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'auto_delete' for queue 'measurement_data_hino_us_pilot_uat' in vhost 'fdc97e13-563c-41b1-843b-1ecf7dbc62d3': received 'true' but current is 'false', class-id=50, method-id=10)
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66)
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36)
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:502)
at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:293)
at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:141)
... 43 more
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'auto_delete' for queue 'measurement_data_hino_us_pilot_uat' in vhost 'fdc97e13-563c-41b1-843b-1ecf7dbc62d3': received 'true' but current is 'false', class-id=50, method-id=10)
at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:517)
at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:341)
at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:182)
at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:114)
at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:739)
at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:47)
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:666)
at java.base/java.lang.Thread.run(Thread.java:832)

Process finished with exit code -1


Really appreciate, if you could help in resolving the issues. Thank you in advance :)

-Naveen.

Request/Reply Message Matching using headers

Hey Guys,

I'm relatively new to scala/gatling and I'm working on a test where I want to match messages on different queues using a custom headers . From what I've gathered I would need to use the mapByMessage but unfortunately have been unable to find an example on how to do this. Does anyone have an example?

Got the following errors when I used PublishExample.scala

Hi Community,

I have tried to use different Scala SDK versions. Is it because Protocol.scala is not in this path anymore but instead at io.gatling.core.protocol.Protocol?

Please kindly help me.

Thank you,

Compiling with Zinc Scala compiler.
Prepared Zinc Scala inputs: 0.12 secs
Compiling 28 Scala sources to /home/kevin/IdeaProjects/GatlingPerfFramework/build/classes/scala/gatling ...
[Error] /home/kevin/IdeaProjects/GatlingPerfFramework/src/gatling/simulations/setup/VLS/RabbitMQ_amqpClient.scala:18: Symbol 'type io.gatling.core.config.Protocol' is missing from the classpath.
This symbol is required by 'class io.gatling.amqp.config.AmqpProtocol'.
Make sure that type Protocol is in your classpath and check for conflicting dependencies with -Ylog-classpath.
A full rebuild may help if 'AmqpProtocol.class' was compiled against an incompatible version of io.gatling.core.config.
[Error] /home/kevin/IdeaProjects/GatlingPerfFramework/src/gatling/simulations/setup/VLS/RabbitMQ_amqpClient.scala:34: overloaded method value protocols with alternatives:
(ps: Iterable[io.gatling.core.protocol.Protocol])RabbitMQ_amqpClient.this.SetUp
(ps: io.gatling.core.protocol.Protocol*)RabbitMQ_amqpClient.this.SetUp
cannot be applied to (io.gatling.amqp.config.AmqpProtocol)
two errors found

java.io.IOException: null

Hi, getting errors like this then trying to push message to the rabbitmq,
logs say that
21:00:24.685 [GatlingSystem-akka.actor.default-dispatcher-4] DEBUG ru.tinkoff.gatling.amqp.action.Publish - Message sent user=1 AMQPMessageID=some_id
and then:
Simulation amqp completed in 0 seconds 21:00:59.797 [GatlingSystem-akka.actor.default-dispatcher-4] ERROR ru.tinkoff.gatling.amqp.action.Publish - 'amqpPublish-2' crashed on session Session(amqp_vcrt,1,1598464859660,Map(68b63433-52a4-4471-aada-832a039db4af -> 0),0,OK,List(ExitOnCompleteLoopBlock(68b63433-52a4-4471-aada-832a039db4af)),io.gatling.core.protocol.ProtocolComponentsRegistry$$Lambda$447/0x0000000800f3a840@1b7e288a), forwarding to the next one java.io.IOException: null at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:129) | => aat com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:125) at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:147) at com.rabbitmq.client.impl.ChannelN.open(ChannelN.java:133) at com.rabbitmq.client.impl.ChannelManager.createChannel(ChannelManager.java:182) at com.rabbitmq.client.impl.AMQConnection.createChannel(AMQConnection.java:555) at com.rabbitmq.client.impl.recovery.AutorecoveringConnection.createChannel(AutorecoveringConnection.java:165) at ru.tinkoff.gatling.amqp.client.AmqpChannelFactory.create(AmqpChannelFactory.scala:8) at ru.tinkoff.gatling.amqp.client.AmqpChannelFactory.create(AmqpChannelFactory.scala:7) at org.apache.commons.pool2.BasePooledObjectFactory.makeObject(BasePooledObjectFactory.java:58) at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:889) at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:424) at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:349) at ru.tinkoff.gatling.amqp.client.AmqpConnectionPool.channel(AmqpConnectionPool.scala:29) at ru.tinkoff.gatling.amqp.client.WithAmqpChannel.withChannel(WithAmqpChannel.scala:8) at ru.tinkoff.gatling.amqp.client.WithAmqpChannel.withChannel$(WithAmqpChannel.scala:7) at ru.tinkoff.gatling.amqp.client.AmqpPublisher.withChannel(AmqpPublisher.scala:11) at ru.tinkoff.gatling.amqp.client.AmqpPublisher.$anonfun$publish$2(AmqpPublisher.scala:21) at ru.tinkoff.gatling.amqp.client.AmqpPublisher.$anonfun$publish$2$adapted(AmqpPublisher.scala:20) at io.gatling.commons.validation.Success.onSuccess(Validation.scala:49) at io.gatling.commons.validation.Validation.foreach(Validation.scala:35) at io.gatling.commons.validation.Validation.foreach$(Validation.scala:35) at io.gatling.commons.validation.Success.foreach(Validation.scala:44) at ru.tinkoff.gatling.amqp.client.AmqpPublisher.$anonfun$publish$1(AmqpPublisher.scala:20) at ru.tinkoff.gatling.amqp.client.AmqpPublisher.$anonfun$publish$1$adapted(AmqpPublisher.scala:19) at io.gatling.commons.validation.Success.onSuccess(Validation.scala:49) at io.gatling.commons.validation.Validation.foreach(Validation.scala:35) at io.gatling.commons.validation.Validation.foreach$(Validation.scala:35) at io.gatling.commons.validation.Success.foreach(Validation.scala:44) at ru.tinkoff.gatling.amqp.client.AmqpPublisher.publish(AmqpPublisher.scala:19) at ru.tinkoff.gatling.amqp.action.AmqpAction.$anonfun$sendRequest$4(AmqpAction.scala:36) at ru.tinkoff.gatling.amqp.action.AmqpAction.$anonfun$sendRequest$4$adapted(AmqpAction.scala:28) at io.gatling.commons.validation.Success.map(Validation.scala:45) at ru.tinkoff.gatling.amqp.action.AmqpAction.$anonfun$sendRequest$3(AmqpAction.scala:28) at io.gatling.commons.validation.Success.flatMap(Validation.scala:46) at ru.tinkoff.gatling.amqp.action.AmqpAction.$anonfun$sendRequest$1(AmqpAction.scala:25) at io.gatling.commons.validation.Success.flatMap(Validation.scala:46) at ru.tinkoff.gatling.amqp.action.AmqpAction.sendRequest(AmqpAction.scala:24) at io.gatling.core.action.RequestAction.$anonfun$execute$1(Action.scala:100) at io.gatling.commons.validation.Success.flatMap(Validation.scala:46) at io.gatling.core.action.RequestAction.execute(Action.scala:97) at io.gatling.core.action.RequestAction.execute$(Action.scala:96) at ru.tinkoff.gatling.amqp.action.AmqpAction.execute(AmqpAction.scala:12) at io.gatling.core.action.Action.$bang(Action.scala:38) at io.gatling.core.action.Action.$bang$(Action.scala:38) at ru.tinkoff.gatling.amqp.action.AmqpAction.io$gatling$core$action$ChainableAction$$super$$bang(AmqpAction.scala:12) at io.gatling.core.action.ChainableAction.$bang(Action.scala:63) at io.gatling.core.action.ChainableAction.$bang$(Action.scala:61) at ru.tinkoff.gatling.amqp.action.AmqpAction.io$gatling$core$action$ExitableAction$$super$$bang(AmqpAction.scala:12) at io.gatling.core.action.ExitableAction.$bang(BlockExit.scala:141) at io.gatling.core.action.ExitableAction.$bang$(BlockExit.scala:139) at ru.tinkoff.gatling.amqp.action.AmqpAction.$bang(AmqpAction.scala:12) at io.gatling.core.action.InnerLoop.execute(Loop.scala:94) at io.gatling.core.action.Action.$bang(Action.scala:38) at io.gatling.core.action.Action.$bang$(Action.scala:38) at io.gatling.core.action.InnerLoop.io$gatling$core$action$ChainableAction$$super$$bang(Loop.scala:58) at io.gatling.core.action.ChainableAction.$bang(Action.scala:63) at io.gatling.core.action.ChainableAction.$bang$(Action.scala:61) at io.gatling.core.action.InnerLoop.$bang(Loop.scala:58) at io.gatling.core.action.Loop.execute(Loop.scala:54) at io.gatling.core.action.Action.$bang(Action.scala:38) at io.gatling.core.action.Action.$bang$(Action.scala:38) at io.gatling.core.action.Loop.$bang(Loop.scala:25) at io.gatling.core.controller.inject.Workload.startUser(Workload.scala:54) at io.gatling.core.controller.inject.Workload.$anonfun$injectUser$1(Workload.scala:63) at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:41) at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:49) at akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) at akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) Caused by: com.rabbitmq.client.ShutdownSignalException: clean connection shutdown; protocol method: #method<connection.close>(reply-code=200, reply-text=OK, class-id=0, method-id=0) at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66) at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36) at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:502) at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:293) at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:141) ... 68 common frames omitted 21:00:59.798 [GatlingSystem-akka.actor.default-dispatcher-4] DEBUG io.gatling.core.action.Exit - End user #1 21:00:59.798 [GatlingSystem-akka.actor.default-dispatcher-4] DEBUG io.gatling.core.controller.inject.open.OpenWorkload - Start user #1 Parsing log file(s)... 21:00:59.808 [pool-1-thread-1] INFO io.gatling.charts.stats.LogFileReader - Collected ArrayBuffer(/Users/inenashev/Documents/Projects/amqp_vcrt/target/gatling/amqp-20200826180059444/simulation.log) from amqp-20200826180059444 21:00:59.814 [pool-1-thread-1] INFO io.gatling.charts.stats.LogFileReader - First pass 21:00:59.818 [pool-1-thread-1] INFO io.gatling.charts.stats.LogFileReader - First pass done: read 3 lines 21:00:59.824 [pool-1-thread-1] INFO io.gatling.charts.stats.LogFileReader - Second pass 21:00:59.836 [pool-1-thread-1] INFO io.gatling.charts.stats.LogFileReader - Second pass: read 3 lines Parsing log file(s) done Generating reports...
is it me doing something wrong or I just misconfigured my script?

Can you please add a consumer example ?

Hi,

I would like to publish/consume messages from multiple hosts. is that already supported ?

One more thing can you please provide an example of reading messages from a existing queue and validate the message body in a gatling session please ?

Connecting with an existing queue/exchange?

Is there any way to connect to an exist queue or exchange? I've noticed that the plugin tries to declare the exchange and if it is already created with additional params (such as dlq etc) it fails. I've noticed in the AmqpPublisher class we never pass the arguments to Rabbit.

Simulation blocked when more than 7 scenarios

Hello,

I'm trying to execute a Simulation which contains 13 scenarios.
Firstly, I executed the test with 2 simulations, and everything worked as expected, but as soon as I tried to merge the 2 simulations into one, gatling won't start the test.
When I try to launch up to 7 scenarios in the setUp(), it works.
As soon as I put an 8th scenario in the setUp(), gatling stays pending and the simulation never starts.
No logs are written, even if DEBUG mode is enabled in logback.xml

I have to kill the process to make it end.

Below some informations about the code:

setUp(
    scnUpdateOMSSendToWorkingOrder.inject(constantUsersPerSec(1) during (60)),
    scnIncorrectOMSSendToOrcDeadletter.inject(constantUsersPerSec(1) during (60)),
    scnOMSWithoutPrepItemSendToWorkingOrder.inject(constantUsersPerSec(1) during (60)),
    scnOMSWithPrepItemSendToWorkingOrder.inject(constantUsersPerSec(1) during (60)),
    scnTryToSendMailWithoutFSID.inject(constantUsersPerSec(1) during (60)),
    scnReceivedSPLSendConfirmMail.inject(constantUsersPerSec(1) during (60)),
    scnSPLCancelMail.inject(constantUsersPerSec(1) during (60)),
    scnMetiSplClkOrderSendToMetiOMS.inject(constantUsersPerSec(1) during (60)),
    scnMetiSplClkOrderSendToMetiOMSWithDiscount.inject(constantUsersPerSec(1) during (60)),
    scnMetiRF604Cancel.inject(constantUsersPerSec(1) during (60)),
    scnMetiRF604Ready.inject(constantUsersPerSec(1) during (60)),
    scnMetiRF604Prepared.inject(constantUsersPerSec(1) during (60)),
    scnMetiRF604IncorrectToDLQ.inject(constantUsersPerSec(1) during (60))
  ).protocols(amqpConf)
    .assertions(
      forAll.successfulRequests.percent.gt(90),
      forAll.responseTime.percentile3.lte(200)
    )

All these scenarios are base on the function below:

def omsScenario(scenarioName: String, exchangeName: String, routeKey: String, replyQueue: String, action: String, filePathMessage: String): ScenarioBuilder = {
val scnMeti: ScenarioBuilder = scenario(scenarioName)
      .feed(correlationIds)
      .exec(
        amqp(scenarioName).requestReply
          .directExchange(exchangeName, routeKey)
          .replyExchange(replyQueue)
          .bytesMessage(RawFileBody(filePathMessage))
          .contentType("application/json")
          .headers("action" -> action, "correlationId" -> "${correlationId}")
          .priority(0)
      )
    scnMeti
  }

Here is the connection configuration:

val amqpConf: AmqpProtocolBuilder = amqp
    .connectionFactory(
      rabbitmq
        .host("my_endpoint")
        .port(5672)
        .username("user")
        .password("pw")
        .vhost("/my_vhost")
    )
    .usePersistentDeliveryMode
    .replyTimeout(900000)
    .matchByMessage(getMatcher)

Any help would be great. Thank you in advance.

Terry

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.