1
0
mirror of https://github.com/taigrr/nats.docs synced 2025-01-18 04:03:23 -08:00
nats.docs/docs/developer/examples/subscribe_arrow.html
Stephen Asbury e8e306c8a8 Added make file
Added title, author to book.json
Added .bookignore
Ran make so docs updated
2019-05-15 10:37:46 -07:00

196 lines
8.1 KiB
HTML

<div class="tab-wrap">
<input type="radio" id="subscribe_arrow_go" name="subscribe_arrow" class="tab" checked>
<label for="subscribe_arrow_go" class="api-lang" data-language="go">Go</label>
<input type="radio" id="subscribe_arrow_java" name="subscribe_arrow" class="tab">
<label for="subscribe_arrow_java" class="api-lang" data-language="java">Java</label>
<input type="radio" id="subscribe_arrow_js" name="subscribe_arrow" class="tab">
<label for="subscribe_arrow_js" class="api-lang" data-language="js">JavaScript</label>
<input type="radio" id="subscribe_arrow_py" name="subscribe_arrow" class="tab">
<label for="subscribe_arrow_py" class="api-lang" data-language="py">Python</label>
<input type="radio" id="subscribe_arrow_ruby" name="subscribe_arrow" class="tab">
<label for="subscribe_arrow_ruby" class="api-lang" data-language="ruby">Ruby</label>
<input type="radio" id="subscribe_arrow_ts" name="subscribe_arrow" class="tab">
<label for="subscribe_arrow_ts" class="api-lang" data-language="ts">TypeScript</label>
<div class="tab__content">
<pre id="subscribe_arrow_go_content"><a class="toolbar-icons pull-right" target="_blank" href="https://github.com/nats-io/go-nats-examples/blob/master/api-examples/subscribe_arrow/main.go#L11-35"><i class="mdi mdi-github-circle" title="View on GitHub"></i></a><a class="toolbar-icons pull-right"><i class="mdi mdi-content-copy js-copy" title="Copy to Clipboard"></i></a><span class="copy-msg pull-right"></span><code class="language-go">nc, err := nats.Connect(&#34;demo.nats.io&#34;)
if err != nil {
log.Fatal(err)
}
defer nc.Close()
// Use a WaitGroup to wait for 4 messages to arrive
wg := sync.WaitGroup{}
wg.Add(4)
// Subscribe
if _, err := nc.Subscribe(&#34;time.&gt;&#34;, func(m *nats.Msg) {
log.Printf(&#34;%s: %s&#34;, m.Subject, m.Data)
wg.Done()
}); err != nil {
log.Fatal(err)
}
// Wait for the 4 messages to come in
wg.Wait()
// Close the connection
nc.Close()
</code></pre>
</div>
<div class="tab__content">
<pre id="subscribe_arrow_java_content"><a class="toolbar-icons pull-right" target="_blank" href="https://github.com/nats-io/java-nats-examples/blob/master/src/main/java/io/nats/examples/SubscribeArrow.java#L14-36"><i class="mdi mdi-github-circle" title="View on GitHub"></i></a><a class="toolbar-icons pull-right"><i class="mdi mdi-content-copy js-copy" title="Copy to Clipboard"></i></a><span class="copy-msg pull-right"></span><code class="language-java">Connection nc = Nats.connect(&#34;nats://demo.nats.io:4222&#34;);
// Use a latch to wait for 4 messages to arrive
CountDownLatch latch = new CountDownLatch(4);
// Create a dispatcher and inline message handler
Dispatcher d = nc.createDispatcher((msg) -&gt; {
String subject = msg.getSubject();
String str = new String(msg.getData(), StandardCharsets.UTF_8);
System.out.println(subject &#43; &#34;: &#34; &#43; str);
latch.countDown();
});
// Subscribe
d.subscribe(&#34;time.&gt;&#34;);
// Wait for messages to come in
latch.await();
// Close the connection
nc.close();
</code></pre>
</div>
<div class="tab__content">
<pre id="subscribe_arrow_js_content"><a class="toolbar-icons pull-right" target="_blank" href="https://github.com/nats-io/node-nats-examples/blob/master/src/subscriber_samples.js#L176-199"><i class="mdi mdi-github-circle" title="View on GitHub"></i></a><a class="toolbar-icons pull-right"><i class="mdi mdi-content-copy js-copy" title="Copy to Clipboard"></i></a><span class="copy-msg pull-right"></span><code class="language-javascript">nc.subscribe(&#39;time.&gt;&#39;, (msg, reply, subject) =&gt; {
// converting timezones correctly in node requires a library
// this doesn&#39;t take into account *many* things.
let time = &#34;&#34;;
switch (subject) {
case &#39;time.us.east&#39;:
time = new Date().toLocaleTimeString(&#34;en-us&#34;, {timeZone: &#34;America/New_York&#34;});
break;
case &#39;time.us.central&#39;:
time = new Date().toLocaleTimeString(&#34;en-us&#34;, {timeZone: &#34;America/Chicago&#34;});
break;
case &#39;time.us.mountain&#39;:
time = new Date().toLocaleTimeString(&#34;en-us&#34;, {timeZone: &#34;America/Denver&#34;});
break;
case &#39;time.us.west&#39;:
time = new Date().toLocaleTimeString(&#34;en-us&#34;, {timeZone: &#34;America/Los_Angeles&#34;});
break;
default:
time = &#34;I don&#39;t know what you are talking about Willis&#34;;
}
t.log(subject, time);
});
</code></pre>
</div>
<div class="tab__content">
<pre id="subscribe_arrow_py_content"><a class="toolbar-icons pull-right" target="_blank" href="https://github.com/nats-io/asyncio-nats-examples/blob/master/subscribe_arrow.py#L6-30"><i class="mdi mdi-github-circle" title="View on GitHub"></i></a><a class="toolbar-icons pull-right"><i class="mdi mdi-content-copy js-copy" title="Copy to Clipboard"></i></a><span class="copy-msg pull-right"></span><code class="language-python">nc = NATS()
await nc.connect(servers=[&#34;nats://demo.nats.io:4222&#34;])
# Use queue to wait for 4 messages to arrive
queue = asyncio.Queue()
async def cb(msg):
await queue.put(msg)
await nc.subscribe(&#34;time.&gt;&#34;, cb=cb)
# Send 2 messages and wait for them to come in
await nc.publish(&#34;time.A.east&#34;, b&#39;A&#39;)
await nc.publish(&#34;time.B.east&#34;, b&#39;B&#39;)
await nc.publish(&#34;time.C.west&#34;, b&#39;C&#39;)
await nc.publish(&#34;time.D.west&#34;, b&#39;D&#39;)
for i in range(0, 4):
msg = await queue.get()
print(&#34;Msg:&#34;, msg)
await nc.close()
</code></pre>
</div>
<div class="tab__content">
<pre id="subscribe_arrow_ruby_content"><a class="toolbar-icons pull-right" target="_blank" href="https://github.com/nats-io/ruby-nats-examples/blob/master/subscribe_arrow.rb#L1-26"><i class="mdi mdi-github-circle" title="View on GitHub"></i></a><a class="toolbar-icons pull-right"><i class="mdi mdi-content-copy js-copy" title="Copy to Clipboard"></i></a><span class="copy-msg pull-right"></span><code class="language-ruby">require &#39;nats/client&#39;
require &#39;fiber&#39;
NATS.start(servers:[&#34;nats://127.0.0.1:4222&#34;]) do |nc|
Fiber.new do
f = Fiber.current
nc.subscribe(&#34;time.&gt;&#34;) do |msg, reply|
f.resume Time.now.to_f
end
nc.publish(&#34;time.A.east&#34;, &#34;A&#34;)
nc.publish(&#34;time.B.east&#34;, &#34;B&#34;)
nc.publish(&#34;time.C.west&#34;, &#34;C&#34;)
nc.publish(&#34;time.D.west&#34;, &#34;D&#34;)
# Use the response
4.times do
msg = Fiber.yield
puts &#34;Msg: #{msg}&#34;
end
end.resume
end
</code></pre>
</div>
<div class="tab__content">
<pre id="subscribe_arrow_ts_content"><a class="toolbar-icons pull-right" target="_blank" href="https://github.com/nats-io/ts-nats-examples/blob/master/src/subscriber_samples.ts#L156-179"><i class="mdi mdi-github-circle" title="View on GitHub"></i></a><a class="toolbar-icons pull-right"><i class="mdi mdi-content-copy js-copy" title="Copy to Clipboard"></i></a><span class="copy-msg pull-right"></span><code class="language-javascript">await nc.subscribe(&#39;time.&gt;&#39;, (err, msg) =&gt; {
// converting timezones correctly in node requires a library
// this doesn&#39;t take into account *many* things.
let time = &#34;&#34;;
switch (msg.subject) {
case &#39;time.us.east&#39;:
time = new Date().toLocaleTimeString(&#34;en-us&#34;, {timeZone: &#34;America/New_York&#34;});
break;
case &#39;time.us.central&#39;:
time = new Date().toLocaleTimeString(&#34;en-us&#34;, {timeZone: &#34;America/Chicago&#34;});
break;
case &#39;time.us.mountain&#39;:
time = new Date().toLocaleTimeString(&#34;en-us&#34;, {timeZone: &#34;America/Denver&#34;});
break;
case &#39;time.us.west&#39;:
time = new Date().toLocaleTimeString(&#34;en-us&#34;, {timeZone: &#34;America/Los_Angeles&#34;});
break;
default:
time = &#34;I don&#39;t know what you are talking about Willis&#34;;
}
t.log(msg.subject, time);
});
</code></pre>
</div>
</div>