我想设置一个Gatling测试用例,将消息放在Oracle AQ上。但我不知道如何设置以下内容:
val jmsConfig = jms
.connectionFactoryName(???)
.url("tcp://localhost:10002")
.credentials("user", "secret")
.contextFactory(???)
.listenerCount(1)
.usePersistentDeliveryMode
什么是连接工厂名称以及上下文工厂是什么?
答案 0 :(得分:1)
" contextFactory"是ContextFactory的类名。 Doc似乎说明了它是" oracle.jms.AQjmsFactory"。
" connectionFactoryName"是用于JNDI查找的密钥。 Doc again似乎表明它已经" cn = OracleDBConnections"。
答案 1 :(得分:1)
我设法使用 oracle.jms.AQjmsInitialContextFactory让它工作。上面提到的 oracle.jms.AQjmsFactory 不是InitialContextFactory所以不行。
确保为要找到的AQjmsInitialContextFactory添加至少版本11+的Oracle AQ依赖项。
您的数据库用户当然应具有正确的权限才能将消息插入队列(表)。
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>