Skip to content

Commit

Permalink
PubWithHeadersBenchmark (#772)
Browse files Browse the repository at this point in the history
  • Loading branch information
scottf authored Oct 17, 2022
1 parent c1659d8 commit 148ceed
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 2 deletions.
15 changes: 13 additions & 2 deletions src/examples/java/io/nats/examples/autobench/NatsAutoBench.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public class NatsAutoBench {
static final String usageString =
"\nUsage: java -cp <classpath> NatsAutoBench" +
"\n[serverURL] [help] [tiny|small|med|large] [conscrypt] [jsfile]" +
"\n[PubOnly] [PubSub] [PubDispatch] [ReqReply] [Latency] " +
"\n[PubOnly] [PubOnlyWithHeaders] [PubSub] [PubDispatch] [ReqReply] [Latency] " +
"\n[JsPubSync] [JsPubAsync] [JsSub] [JsPubRounds]" +
"[-lcsv <filespec>] \n\n"
+ "If no specific test name(s) are supplied all will be run, otherwise only supplied tests will be run."
Expand All @@ -47,6 +47,7 @@ public static void main(String[] args) {
// TO RUN WITH ARGS FROM IDE, ADD A LINE LIKE THESE
// args = "myhost:4222 med".split(" ");
args = "small PubOnly".split(" ");
// args = "large PubOnlyWithHeaders".split(" ");
// args = "med JsPubAsync".split(" ");
// args = "help".split(" ");
// args = "latency large".split(" ");
Expand Down Expand Up @@ -149,7 +150,12 @@ public static List<AutoBenchmark> buildTestList(Arguments a) {

if (a.allTests || a.pubOnly) {
addTests(a.baseMsgs, a.maxSize, tests, sizes, msgsMultiple,
(msize, mcnt) -> new PubBenchmark("PubOnly " + msize, mcnt, msize));
(msize, mcnt) -> new PubBenchmark("PubOnly " + msize, mcnt, msize));
}

if (a.PubOnlyWithHeaders) {
addTests(a.baseMsgs, a.maxSize, tests, sizes, msgsMultiple,
(msize, mcnt) -> new PubWithHeadersBenchmark("PubOnlyWithHeaders " + msize, mcnt, msize));
}

if (a.allTests || a.pubSub) {
Expand Down Expand Up @@ -285,6 +291,7 @@ static class Arguments {
boolean allTests = true;

boolean pubOnly = false;
boolean PubOnlyWithHeaders = false;
boolean pubSub = false;
boolean pubDispatch = false;
boolean reqReply = false;
Expand Down Expand Up @@ -332,6 +339,10 @@ private static Arguments readArgs(String[] args) {
a.allTests = false;
a.pubOnly = true;
break;
case "pubonlywithheaders":
a.allTests = false;
a.PubOnlyWithHeaders = true;
break;
case "pubsub":
a.allTests = false;
a.pubSub = true;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// Copyright 2015-2018 The NATS Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at:
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package io.nats.examples.autobench;

import io.nats.client.Connection;
import io.nats.client.NUID;
import io.nats.client.Nats;
import io.nats.client.Options;
import io.nats.client.impl.Headers;
import io.nats.client.impl.NatsMessage;

import java.io.IOException;

public class PubWithHeadersBenchmark extends AutoBenchmark {
public PubWithHeadersBenchmark(String name, long messageCount, long messageSize) {
super(name, messageCount, messageSize);
}

public void execute(Options connectOptions) throws InterruptedException {
int msize = (int)getMessageSize();
int headersSize = msize / 10;
if (headersSize < 4) {
headersSize = 4;
}
msize = Math.max(0, msize - headersSize);
byte[] payload = new byte[msize];
StringBuilder sb = new StringBuilder();
while (sb.length() < headersSize) {
sb.append(NUID.nextGlobal());
}
String headerValue = sb.substring(0, headersSize - 3);
String subject = getSubject();

try {
Connection nc = Nats.connect(connectOptions);
try {
this.startTiming();
for (int i = 0; i < this.getMessageCount(); i++) {
nc.publish(NatsMessage.builder().subject(subject).data(payload)
.headers(new Headers().put("hdr", headerValue))
.build());
}
defaultFlush(nc);
this.endTiming();
} finally {
nc.close();
}
} catch (IOException ex) {
this.setException(ex);
}
}
}

0 comments on commit 148ceed

Please sign in to comment.