使用 Gatling 进行 Oracle AQ 负载测试
Oracle AQ load test with Gatling
我想设置一个 Gatling 测试用例以将消息放在 Oracle AQ 上。但我不知道如何设置以下内容:
val jmsConfig = jms
.connectionFactoryName(???)
.url("tcp://localhost:10002")
.credentials("user", "secret")
.contextFactory(???)
.listenerCount(1)
.usePersistentDeliveryMode
连接工厂名称是什么,上下文工厂是什么?
"contextFactory" 是您的 ContextFactory 的 class 名称。 Doc 似乎是 "oracle.jms.AQjmsFactory"。
"connectionFactoryName" 是用于 JNDI 查找的键。 Doc again 似乎是 "cn=OracleDBConnections"。
我设法使用 oracle.jms.AQjmsInitialContextFactory. 使它工作 上面提到的 oracle.jms.AQjmsFactory 不是InitialContextFactory 这样就不起作用了。
确保至少添加版本 11+ 的 Oracle AQ 依赖项才能找到 AQjmsInitialContextFactory。
您的数据库用户当然应该有正确的权限才能将消息插入队列 (table)。
Gatling 期望您具有请求-回复语义,因此它将等待收到回复。我实际上想在指定时间后中止等待回复,但我不知道该怎么做。所以如果有人知道如何.. 请告诉我:-)
MySimulation.scala
val jmsConfig = jms
.connectionFactoryName("ConnectionFactory") // MUST!!!! be called ConnectionFactory, the AQjmsFactory expects this naming convention!
.url("jdbc:oracle:thin:@host:1521:SID")
.credentials("user", "password")
.contextFactory("oracle.jms.AQjmsInitialContextFactory")
.listenerCount(1)
.usePersistentDeliveryMode
// TODO check how to set a timeout on the reply
val jmsScenario = scenario("JMS DSL test")
.repeat(1) {
exec(
jms("req reply testing")
.reqreply
.queue("AQ_ADMIN.QUEUE_NAME")
.textMessage("some message")
.check(simpleCheck(checkBodyTextCorrect))
)
}
def checkBodyTextCorrect(m: Message) = {
// this assumes that the service just does an "uppercase" transform on the text
m match {
case tm: TextMessage => tm.getText == "text that should be in the reply message"
case _ => false
}
}
setUp(jmsScenario.inject(atOnceUsers(1)).protocols(jmsConfig));
jndi.properties
我必须将 jndi.properties 添加到类路径中:
db_url=jdbc:oracle:thin:@host:1521:SID
pom.xml
依赖关系(maven):
<dependency>
<groupId>oracle</groupId>
<artifactId>aqapi</artifactId>
<version>11.2.0.3</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.2.0</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
我想设置一个 Gatling 测试用例以将消息放在 Oracle AQ 上。但我不知道如何设置以下内容:
val jmsConfig = jms
.connectionFactoryName(???)
.url("tcp://localhost:10002")
.credentials("user", "secret")
.contextFactory(???)
.listenerCount(1)
.usePersistentDeliveryMode
连接工厂名称是什么,上下文工厂是什么?
"contextFactory" 是您的 ContextFactory 的 class 名称。 Doc 似乎是 "oracle.jms.AQjmsFactory"。
"connectionFactoryName" 是用于 JNDI 查找的键。 Doc again 似乎是 "cn=OracleDBConnections"。
我设法使用 oracle.jms.AQjmsInitialContextFactory. 使它工作 上面提到的 oracle.jms.AQjmsFactory 不是InitialContextFactory 这样就不起作用了。
确保至少添加版本 11+ 的 Oracle AQ 依赖项才能找到 AQjmsInitialContextFactory。
您的数据库用户当然应该有正确的权限才能将消息插入队列 (table)。
Gatling 期望您具有请求-回复语义,因此它将等待收到回复。我实际上想在指定时间后中止等待回复,但我不知道该怎么做。所以如果有人知道如何.. 请告诉我:-)
MySimulation.scala
val jmsConfig = jms
.connectionFactoryName("ConnectionFactory") // MUST!!!! be called ConnectionFactory, the AQjmsFactory expects this naming convention!
.url("jdbc:oracle:thin:@host:1521:SID")
.credentials("user", "password")
.contextFactory("oracle.jms.AQjmsInitialContextFactory")
.listenerCount(1)
.usePersistentDeliveryMode
// TODO check how to set a timeout on the reply
val jmsScenario = scenario("JMS DSL test")
.repeat(1) {
exec(
jms("req reply testing")
.reqreply
.queue("AQ_ADMIN.QUEUE_NAME")
.textMessage("some message")
.check(simpleCheck(checkBodyTextCorrect))
)
}
def checkBodyTextCorrect(m: Message) = {
// this assumes that the service just does an "uppercase" transform on the text
m match {
case tm: TextMessage => tm.getText == "text that should be in the reply message"
case _ => false
}
}
setUp(jmsScenario.inject(atOnceUsers(1)).protocols(jmsConfig));
jndi.properties
我必须将 jndi.properties 添加到类路径中:
db_url=jdbc:oracle:thin:@host:1521:SID
pom.xml
依赖关系(maven):
<dependency>
<groupId>oracle</groupId>
<artifactId>aqapi</artifactId>
<version>11.2.0.3</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.2.0</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>