
ru.tinkoff.gatling.amqp.action.AmqpAction.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gatling-amqp-plugin_2.13 Show documentation
Show all versions of gatling-amqp-plugin_2.13 Show documentation
Plugin for support performance testing with AMQP in Gatling
The newest version!
package ru.tinkoff.gatling.amqp.action
import io.gatling.commons.validation.{Validation, _}
import io.gatling.core.action.RequestAction
import io.gatling.core.controller.throttle.Throttler
import io.gatling.core.session.{Expression, Session}
import io.gatling.core.util.NameGen
import ru.tinkoff.gatling.amqp.client.AmqpPublisher
import ru.tinkoff.gatling.amqp.protocol.AmqpComponents
import ru.tinkoff.gatling.amqp.request.{AmqpAttributes, AmqpMessageProperties, AmqpProtocolMessage}
abstract class AmqpAction(
attributes: AmqpAttributes,
components: AmqpComponents,
throttler: Option[Throttler],
) extends RequestAction with AmqpLogging with NameGen {
override val requestName: Expression[String] = attributes.requestName
private val publisher = new AmqpPublisher(attributes.destination, components)
override def sendRequest(session: Session): Validation[Unit] =
for {
reqName <- requestName(session)
props <- AmqpMessageProperties.toBasicProperties(attributes.messageProperties, session)
propsWithDelivery <- props.builder().deliveryMode(components.protocol.deliveryMode.mode).build().success
message <- attributes.message
.amqpProtocolMessage(session)
.map(_.copy(amqpProperties = propsWithDelivery))
.map(components.protocol.messageMatcher.prepareRequest)
} yield throttler
.fold(publishAndLogMessage(reqName, message, session))(
_.throttle(session.scenario, () => publishAndLogMessage(reqName, message, session)),
)
protected def publishAndLogMessage(
requestNameString: String,
msg: AmqpProtocolMessage,
session: Session,
publisher: AmqpPublisher = publisher,
): Unit
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy