diff --git a/src/examples/java/io/nats/examples/autobench/NatsAutoBench.java b/src/examples/java/io/nats/examples/autobench/NatsAutoBench.java index a89f1b98c..927a4c7a2 100644 --- a/src/examples/java/io/nats/examples/autobench/NatsAutoBench.java +++ b/src/examples/java/io/nats/examples/autobench/NatsAutoBench.java @@ -35,7 +35,7 @@ public class NatsAutoBench { static final String usageString = "\nUsage: java -cp 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 ] \n\n" + "If no specific test name(s) are supplied all will be run, otherwise only supplied tests will be run." @@ -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(" "); @@ -149,7 +150,12 @@ public static List 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) { @@ -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; @@ -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; diff --git a/src/examples/java/io/nats/examples/autobench/PubWithHeadersBenchmark.java b/src/examples/java/io/nats/examples/autobench/PubWithHeadersBenchmark.java new file mode 100644 index 000000000..8f5bdbfe1 --- /dev/null +++ b/src/examples/java/io/nats/examples/autobench/PubWithHeadersBenchmark.java @@ -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); + } + } +} \ No newline at end of file