in src/protocol/jms/src/main/java/org/apache/jmeter/protocol/jms/sampler/SubscriberSampler.java [143:229]
public SampleResult sample() {
// run threadStarted only if Destination setup on each sample
if (!isDestinationStatic()) {
threadStarted(true);
}
SampleResult result = new SampleResult();
result.setDataType(SampleResult.TEXT);
result.setSampleLabel(getName());
result.sampleStart();
if (exceptionDuringInit != null) {
result.sampleEnd();
result.setSuccessful(false);
result.setResponseCode("000");
result.setResponseMessage(exceptionDuringInit.toString());
handleErrorAndAddTemporize(true);
return result;
}
if (stopBetweenSamples){ // If so, we need to start collection here
try {
SUBSCRIBER.start();
} catch (JMSException e) {
log.warn("Problem starting subscriber", e);
}
}
StringBuilder buffer = new StringBuilder();
StringBuilder propBuffer = new StringBuilder();
int loop = getIterationCount();
int read = 0;
long until = 0L;
long now = System.currentTimeMillis();
if (timeout > 0) {
until = timeout + now;
}
while (!interrupted
&& (until == 0 || now < until)
&& read < loop) {
Message msg;
try {
msg = SUBSCRIBER.getMessage(calculateWait(until, now));
if (msg != null){
read++;
extractContent(buffer, propBuffer, msg, read == loop);
}
} catch (JMSException e) {
String errorCode = Optional.ofNullable(e.getErrorCode()).orElse("");
log.warn("Error [{}] {}", errorCode, e.toString(), e);
handleErrorAndAddTemporize(getIsReconnectErrorCode().test(errorCode));
}
now = System.currentTimeMillis();
}
result.sampleEnd();
if (getReadResponseAsBoolean()) {
result.setResponseData(buffer.toString(), result.getDataEncodingWithDefault());
} else {
result.setBytes((long)buffer.toString().length());
}
result.setResponseHeaders(propBuffer.toString());
if (read == 0) {
result.setResponseCode("404"); // Not found
result.setSuccessful(false);
} else if (read < loop) { // Not enough messages found
result.setResponseCode("500"); // Server error
result.setSuccessful(false);
} else {
result.setResponseCodeOK();
result.setSuccessful(true);
}
result.setResponseMessage(read + " message(s) received successfully of " + loop + " expected");
result.setSamplerData(loop + " messages expected");
result.setSampleCount(read);
if (stopBetweenSamples){
try {
SUBSCRIBER.stop();
} catch (JMSException e) {
log.warn("Problem stopping subscriber", e);
}
}
// run threadFinished only if Destination setup on each sample (stop Listen queue)
if (!isDestinationStatic()) {
threadFinished(true);
}
return result;
}