SlideShare a Scribd company logo
1 of 26
Download to read offline
RUSTなNATSのCLIENT
を作ってみたRUST 1.0 RELEASE記念祝賀LT会MAY 2015
@WALLYQS
ABOUT ME
Name: Wally (ワリ)
Twitter:
Github:
From Mexico :)
https://twitter.com/wallyqs
https://github.com/wallyqs
Moving to San Francisco next week!
WHAT IS NATS
What is NATS?
Message bus written by Derek Collison (Apcera)
Written in Go
Great performance!
website: https://nats.io/
GREEEEEAT PERFORMANCE
Source: http://bravenewgeek.com/dissecting-message-
queues/
HOW TO WRITE A NATS CLIENT?
What we need
Basic parser of the protocol
Networking I/O
Concurrency
Callbacks
WE CAN DO THIS WITH RUST!
What we need
[X]Basic parser of the protocol
[X]Concurrency
[X]Networking I/O
[X]Callbacks
HOW IT LOOKS?
fnmain(){
letmutnats=Client::new("192.168.0.2:4222");
letmutopts=HashMap::new();
opts.insert("user","hoge");
opts.insert("pass","fuga");
matchnats.connect(&mutopts){
Ok(())=>println!("Successfullyconnected!"),
Err(e)=>println!("Failed!{}",e)
}
let(tx,rx)=channel();
nats.subscribe("workers.double",
Box::new(move|msg|{
lettx=tx.clone();
letm=msg.trim();
letn=m.parse::<u64>().unwrap();
letresult=n*2;
println!("{}x2={}",m,result);
tx.send("DONE!");
}));
//Subscriptionshoulddoublethenumber
nats.publish("workers.double","20".to_string());
//Stopwhendone
letdone=rx.recv().unwrap();
println!("Status:{}",done);
}
IMPLEMENTING IT!
PARSER
NATS 101
Very simple, plain text protocol:
CONNECT
INFO
SUB
UNSUB
PUB
MSG
SIMPLE PROTOCOL
//Protocol
constCONNECT:&'staticstr="CONNECT";
constINFO: &'staticstr="INFO";
constPING: &'staticstr="PINGrn";
constPONG: &'staticstr="PONGrn";
constPUB: &'staticstr="PUB";
constSUB: &'staticstr="SUB";
constUNSUB: &'staticstr="UNSUB";
constMSG: &'staticstr="MSG";
constOK: &'staticstr="+OKrn";
constERR: &'staticstr="-ERR";
constCR_LF: &'staticstr="rn";
constSPC: &'staticstr="";
HOW TO IMPLEMENT THIS?
Thread, loop and match combo:
thread::spawn(move||{
loop{
//...
letmutproto=line.splitn(2,"");
letnats_op=proto.nth(0);
matchnats_op{
Some(INFO)=>{},
Some(PING)=>{},
Some(PONG)=>{},
Some(MSG) =>{},
Some(OK) =>{},
Some(ERR) =>println!("Errorintheprotocol:{}",line),
Some(_) =>println!("UnknownProtocol:{}",line),
None =>println!("NoProtocol:{}",line),
}
}
};
NETWORKING IO
usestd::io::BufRead;
usestd::io::BufStream;
usestd::net::TcpStream;
fnmain(){
letstream =TcpStream::connect("demo.nats.io:4222").unwrap();
letmutnats_io=BufStream::new(stream);
letmutline=String::new();
letresult=nats_io.read_line(&mutline);
println!("Gotthis:{}",line);
}
MAKING IT CURRENT
Meet Arc<Mutex<T>>>
usestd::io::BufRead;
usestd::io::BufStream;
usestd::net::TcpStream;
usestd::sync::{Arc,Mutex};
fnmain(){
letstream =TcpStream::connect("demo.nats.io:4222").unwrap();
letmutnats_io=BufStream::new(stream);
letmutio=Arc::new(Mutex::new(nats_io));
//Andeachtimewewanttouseit
letmutcloned_nats_io=self.io.clone();
letmutborrowed_io=cloned_nats_io.try_lock().unwrap();
letmutline=String::new();
letresult=borrowed_io.read_line(&mutline);
println!("Gotthis:{}",line);
}
CALLBACKS
(This was the hardest part…)
How to dispatch the subscription callbacks?
usestd::collections::HashMap;
usestd::sync::{Arc,Mutex};
usestd::thread;
pubstructCallbackStore{
cid:u8,
cbs:Arc<Mutex<HashMap<u8,Box<Fn(&str)+Send>>>>
}
CALLBACKSTORE IMPLEMENTATION
implCallbackStore{
pubfnnew()->CallbackStore{
returnCallbackStore{
cid:1,
cbs:Arc::new(Mutex::new(HashMap::new())),
};
}
pubfnadd_callback(&mutself,cccb:Box<Fn(&str)+Send>){
self.cid+=1;
let_cbs=self.cbs.clone();
letmutcbs =_cbs.try_lock().unwrap();
cbs.insert(self.cid,cccb);
}
}
DISPATCHER LOOP
pubfndispatcher_loop(cstore:Arc<Mutex<HashMap<u8,Box<Fn(&str)+Send>>>>)
{
thread::spawn(move||{
loop{
thread::sleep_ms(500);
println!("Dispatchingthecallbacks...");
letmutccbs=cstore.clone();
letmutcbs=ccbs.try_lock().unwrap();
//Getthefirstcallback
letcb2=cbs.get(&2).unwrap();
cb2("helloworld");
//Getthefirstcallback
letcb3=cbs.get(&3).unwrap();
cb3("helloworld!!!!!!!!!");
//Howmanycallbacks?
println!("Currently:{}callbacks",cbs.len());
}
});
}
DISPATCH!
Store callbacks by putting them in a Box:
fnmain(){
println!("Storingsomecallbacks...");
letmutstore=CallbackStore::new();
store.add_callback(Box::new(|msg|{
println!("Yougotit!Thisisit:{}",msg);
}));
store.add_callback(Box::new(|msg|{
println!("Andthisis:{}",msg);
}));
dispatcher_loop(store.cbs.clone());
thread::sleep_ms(1000);
}
SOURCE
https://github.com/wallyqs/rust-nats
(まだまだいまいちですが…)
DEMO
RUSTのハマったところ
READING BYTES
Didn't grok this part…
//TODO:Figureouthowtofetchexactnumberofbytesfromthestream
// also,deadlock
pubfnread_message_payload(msg_size:u64,eio:Arc<Mutex<BufStream<TcpStr
eam>>>)->String{
println!("Willtrytoreadthenextline.....");
letmutnats_io=eio.clone();
letmutio=nats_io.try_lock().unwrap();
letmutpayload=String::new();
//TODO:FigureouthowtogetNbytes
//letresult=io.take(msg_size);
//letresult=io.read_line(&mutpayload).unwrap();
println!("Readthemessage!");
returnpayload;
}
GETTING FAMILIAR WITH THE BORROW CHECKER
へええ
//SendconnectfirstbyprocessingINFO
letline={
letmutl=String::new();
letmutnats_io=self.io.clone();
letmutio=nats_io.try_lock().unwrap();
letresult=io.read_line(&mutl).unwrap();
//Returntheline
l
};
//releasedthelockhere,wooooot!
UNDERSTANDING CONCURRENCY
この部分を理解するのにだいぶ時間かかったわ~
pubstructClient{
io:Arc<Mutex<BufStream<TcpStream>>>,
options: HashMap<&'staticstr,&'staticstr>,
ssid:u8,
subs:Arc<Mutex<HashMap<u8,Box<Fn(&str)+Send>>>>,//TODO:needsclient
too
}
OVERUSING TRY_LOCK
Good for prototyping…
実は今のクライアントめっちゃcrashする..
letmutio=nats_io.try_lock().unwrap();
THANKS
ご静聴ありがとうございます!

More Related Content

Viewers also liked

elixirを使ったゲームサーバ
elixirを使ったゲームサーバelixirを使ったゲームサーバ
elixirを使ったゲームサーバHidetaka Kojo
 
Publiczne Gimnazjum w Zaborze/English
Publiczne Gimnazjum w Zaborze/EnglishPubliczne Gimnazjum w Zaborze/English
Publiczne Gimnazjum w Zaborze/Englishagatawaltrowska
 
TAT Tourism Journal 1/2013 & 4/2012 (2555-2556)
TAT Tourism Journal 1/2013 & 4/2012 (2555-2556)TAT Tourism Journal 1/2013 & 4/2012 (2555-2556)
TAT Tourism Journal 1/2013 & 4/2012 (2555-2556)Zabitan
 
Catálogo casual collectives
Catálogo casual collectives Catálogo casual collectives
Catálogo casual collectives Ortus Fitness
 
Question papers
Question papersQuestion papers
Question papersAnkit Dutt
 
ข้อบังคับ ของ นิติบุคคลอาคารชุด ลุมพินี พาร์ค ริเวอร์ไซด์-พระราม 3
ข้อบังคับ ของ นิติบุคคลอาคารชุด ลุมพินี พาร์ค ริเวอร์ไซด์-พระราม 3ข้อบังคับ ของ นิติบุคคลอาคารชุด ลุมพินี พาร์ค ริเวอร์ไซด์-พระราม 3
ข้อบังคับ ของ นิติบุคคลอาคารชุด ลุมพินี พาร์ค ริเวอร์ไซด์-พระราม 3Zabitan
 
Fiestas infantiles de nelita
Fiestas infantiles de nelitaFiestas infantiles de nelita
Fiestas infantiles de nelitaMarianelaCV
 
[Cruise Marketing] Targeting Cruise Audiences on Social Media
[Cruise Marketing] Targeting Cruise Audiences on Social Media[Cruise Marketing] Targeting Cruise Audiences on Social Media
[Cruise Marketing] Targeting Cruise Audiences on Social MediaDigital Visitor
 
ระดับประถมศึกษา หลักสูตรการเรียนรู้ด้านการท่องเที่ยว
ระดับประถมศึกษา หลักสูตรการเรียนรู้ด้านการท่องเที่ยวระดับประถมศึกษา หลักสูตรการเรียนรู้ด้านการท่องเที่ยว
ระดับประถมศึกษา หลักสูตรการเรียนรู้ด้านการท่องเที่ยวZabitan
 
eTwinning w Publicznym Gimnazjum w Zaborze
eTwinning w Publicznym Gimnazjum w ZaborzeeTwinning w Publicznym Gimnazjum w Zaborze
eTwinning w Publicznym Gimnazjum w Zaborzeagatawaltrowska
 
Publiczne Gimnazjum w Zaborze rok szkolny 20112012
Publiczne Gimnazjum w Zaborze rok szkolny 20112012Publiczne Gimnazjum w Zaborze rok szkolny 20112012
Publiczne Gimnazjum w Zaborze rok szkolny 20112012agatawaltrowska
 
Gunpla Navigation Catalog 2013
Gunpla Navigation Catalog 2013Gunpla Navigation Catalog 2013
Gunpla Navigation Catalog 2013Zabitan
 
How to optimise your social media campaigns
How to optimise your social media campaignsHow to optimise your social media campaigns
How to optimise your social media campaignsDigital Visitor
 

Viewers also liked (19)

elixirを使ったゲームサーバ
elixirを使ったゲームサーバelixirを使ったゲームサーバ
elixirを使ったゲームサーバ
 
Publiczne Gimnazjum w Zaborze/English
Publiczne Gimnazjum w Zaborze/EnglishPubliczne Gimnazjum w Zaborze/English
Publiczne Gimnazjum w Zaborze/English
 
TAT Tourism Journal 1/2013 & 4/2012 (2555-2556)
TAT Tourism Journal 1/2013 & 4/2012 (2555-2556)TAT Tourism Journal 1/2013 & 4/2012 (2555-2556)
TAT Tourism Journal 1/2013 & 4/2012 (2555-2556)
 
Catálogo casual collectives
Catálogo casual collectives Catálogo casual collectives
Catálogo casual collectives
 
Polish inventor
Polish inventorPolish inventor
Polish inventor
 
Question papers
Question papersQuestion papers
Question papers
 
ข้อบังคับ ของ นิติบุคคลอาคารชุด ลุมพินี พาร์ค ริเวอร์ไซด์-พระราม 3
ข้อบังคับ ของ นิติบุคคลอาคารชุด ลุมพินี พาร์ค ริเวอร์ไซด์-พระราม 3ข้อบังคับ ของ นิติบุคคลอาคารชุด ลุมพินี พาร์ค ริเวอร์ไซด์-พระราม 3
ข้อบังคับ ของ นิติบุคคลอาคารชุด ลุมพินี พาร์ค ริเวอร์ไซด์-พระราม 3
 
Fiestas infantiles de nelita
Fiestas infantiles de nelitaFiestas infantiles de nelita
Fiestas infantiles de nelita
 
[Cruise Marketing] Targeting Cruise Audiences on Social Media
[Cruise Marketing] Targeting Cruise Audiences on Social Media[Cruise Marketing] Targeting Cruise Audiences on Social Media
[Cruise Marketing] Targeting Cruise Audiences on Social Media
 
Belleza al limite
Belleza al limiteBelleza al limite
Belleza al limite
 
ระดับประถมศึกษา หลักสูตรการเรียนรู้ด้านการท่องเที่ยว
ระดับประถมศึกษา หลักสูตรการเรียนรู้ด้านการท่องเที่ยวระดับประถมศึกษา หลักสูตรการเรียนรู้ด้านการท่องเที่ยว
ระดับประถมศึกษา หลักสูตรการเรียนรู้ด้านการท่องเที่ยว
 
Badalona
BadalonaBadalona
Badalona
 
Dish stories
Dish storiesDish stories
Dish stories
 
Activity6 project
Activity6 projectActivity6 project
Activity6 project
 
eTwinning w Publicznym Gimnazjum w Zaborze
eTwinning w Publicznym Gimnazjum w ZaborzeeTwinning w Publicznym Gimnazjum w Zaborze
eTwinning w Publicznym Gimnazjum w Zaborze
 
Publiczne Gimnazjum w Zaborze rok szkolny 20112012
Publiczne Gimnazjum w Zaborze rok szkolny 20112012Publiczne Gimnazjum w Zaborze rok szkolny 20112012
Publiczne Gimnazjum w Zaborze rok szkolny 20112012
 
Gunpla Navigation Catalog 2013
Gunpla Navigation Catalog 2013Gunpla Navigation Catalog 2013
Gunpla Navigation Catalog 2013
 
Catálogo momentum
Catálogo momentumCatálogo momentum
Catálogo momentum
 
How to optimise your social media campaigns
How to optimise your social media campaignsHow to optimise your social media campaigns
How to optimise your social media campaigns
 

Similar to RustなNATSのClientを作ってみた

HTML5 WebSocket: The New Network Stack for the Web
HTML5 WebSocket: The New Network Stack for the WebHTML5 WebSocket: The New Network Stack for the Web
HTML5 WebSocket: The New Network Stack for the WebPeter Lubbers
 
How (Docker) Community changed my life
How (Docker) Community changed my lifeHow (Docker) Community changed my life
How (Docker) Community changed my lifeKaroly Kass
 
DevOOPS: Attacks and Defenses for DevOps Toolchains
DevOOPS: Attacks and Defenses for DevOps ToolchainsDevOOPS: Attacks and Defenses for DevOps Toolchains
DevOOPS: Attacks and Defenses for DevOps ToolchainsChris Gates
 
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...Athens IoT Meetup
 
CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)
CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)
CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)Red Hat Developers
 
Docker for Java Developers
Docker for Java DevelopersDocker for Java Developers
Docker for Java DevelopersImesh Gunaratne
 
Automating linux network performance testing
Automating linux network performance testingAutomating linux network performance testing
Automating linux network performance testingAntonio Ojea Garcia
 
Microservices 5 things i wish i'd known code motion
Microservices 5 things i wish i'd known   code motionMicroservices 5 things i wish i'd known   code motion
Microservices 5 things i wish i'd known code motionVincent Kok
 
Microservices: 5 things I wish I'd known - Vincent Kok - Codemotion Amsterdam...
Microservices: 5 things I wish I'd known - Vincent Kok - Codemotion Amsterdam...Microservices: 5 things I wish I'd known - Vincent Kok - Codemotion Amsterdam...
Microservices: 5 things I wish I'd known - Vincent Kok - Codemotion Amsterdam...Codemotion
 
Vincent Kok - Microservices 5 things I wish I'd known - Codemotion Milan 2017
Vincent Kok - Microservices 5 things I wish I'd known - Codemotion Milan 2017Vincent Kok - Microservices 5 things I wish I'd known - Codemotion Milan 2017
Vincent Kok - Microservices 5 things I wish I'd known - Codemotion Milan 2017Codemotion
 
Microservices: 5 Things I Wish I'd Known - Code Motion Milan 2017
Microservices: 5 Things I Wish I'd Known - Code Motion Milan 2017Microservices: 5 Things I Wish I'd Known - Code Motion Milan 2017
Microservices: 5 Things I Wish I'd Known - Code Motion Milan 2017Vincent Kok
 
Nginx for Fun & Performance - Philipp Krenn - Codemotion Rome 2015
Nginx for Fun & Performance - Philipp Krenn - Codemotion Rome 2015Nginx for Fun & Performance - Philipp Krenn - Codemotion Rome 2015
Nginx for Fun & Performance - Philipp Krenn - Codemotion Rome 2015Codemotion
 
Kansas City DC/OS Meetup December 2016
Kansas City DC/OS Meetup December 2016Kansas City DC/OS Meetup December 2016
Kansas City DC/OS Meetup December 2016DaShaun Carter
 
Anton Moldovan "Building an efficient replication system for thousands of ter...
Anton Moldovan "Building an efficient replication system for thousands of ter...Anton Moldovan "Building an efficient replication system for thousands of ter...
Anton Moldovan "Building an efficient replication system for thousands of ter...Fwdays
 
Need to-know patterns building microservices - java one
Need to-know patterns building microservices - java oneNeed to-know patterns building microservices - java one
Need to-know patterns building microservices - java oneVincent Kok
 
Ajaxworld March 2008 - Jeff Haynie Keynote - Appcelerator
Ajaxworld March 2008 - Jeff Haynie Keynote - AppceleratorAjaxworld March 2008 - Jeff Haynie Keynote - Appcelerator
Ajaxworld March 2008 - Jeff Haynie Keynote - AppceleratorJeff Haynie
 

Similar to RustなNATSのClientを作ってみた (20)

HTML5 WebSocket: The New Network Stack for the Web
HTML5 WebSocket: The New Network Stack for the WebHTML5 WebSocket: The New Network Stack for the Web
HTML5 WebSocket: The New Network Stack for the Web
 
How (Docker) Community changed my life
How (Docker) Community changed my lifeHow (Docker) Community changed my life
How (Docker) Community changed my life
 
DevOOPS: Attacks and Defenses for DevOps Toolchains
DevOOPS: Attacks and Defenses for DevOps ToolchainsDevOOPS: Attacks and Defenses for DevOps Toolchains
DevOOPS: Attacks and Defenses for DevOps Toolchains
 
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
Athens IoT meetup #7 - Create the Internet of your Things - Laurent Ellerbach...
 
CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)
CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)
CDK 2.0: Docker, Kubernetes, And OSE On Your Desk (Langdon White)
 
Docker for Java Developers
Docker for Java DevelopersDocker for Java Developers
Docker for Java Developers
 
Automating linux network performance testing
Automating linux network performance testingAutomating linux network performance testing
Automating linux network performance testing
 
Intro to WebSockets
Intro to WebSocketsIntro to WebSockets
Intro to WebSockets
 
(C)NodeJS
(C)NodeJS(C)NodeJS
(C)NodeJS
 
Microservices 5 things i wish i'd known code motion
Microservices 5 things i wish i'd known   code motionMicroservices 5 things i wish i'd known   code motion
Microservices 5 things i wish i'd known code motion
 
Microservices: 5 things I wish I'd known - Vincent Kok - Codemotion Amsterdam...
Microservices: 5 things I wish I'd known - Vincent Kok - Codemotion Amsterdam...Microservices: 5 things I wish I'd known - Vincent Kok - Codemotion Amsterdam...
Microservices: 5 things I wish I'd known - Vincent Kok - Codemotion Amsterdam...
 
Vincent Kok - Microservices 5 things I wish I'd known - Codemotion Milan 2017
Vincent Kok - Microservices 5 things I wish I'd known - Codemotion Milan 2017Vincent Kok - Microservices 5 things I wish I'd known - Codemotion Milan 2017
Vincent Kok - Microservices 5 things I wish I'd known - Codemotion Milan 2017
 
Microservices: 5 Things I Wish I'd Known - Code Motion Milan 2017
Microservices: 5 Things I Wish I'd Known - Code Motion Milan 2017Microservices: 5 Things I Wish I'd Known - Code Motion Milan 2017
Microservices: 5 Things I Wish I'd Known - Code Motion Milan 2017
 
Nginx for Fun & Performance - Philipp Krenn - Codemotion Rome 2015
Nginx for Fun & Performance - Philipp Krenn - Codemotion Rome 2015Nginx for Fun & Performance - Philipp Krenn - Codemotion Rome 2015
Nginx for Fun & Performance - Philipp Krenn - Codemotion Rome 2015
 
HTTP2 is Here!
HTTP2 is Here!HTTP2 is Here!
HTTP2 is Here!
 
Kansas City DC/OS Meetup December 2016
Kansas City DC/OS Meetup December 2016Kansas City DC/OS Meetup December 2016
Kansas City DC/OS Meetup December 2016
 
Anton Moldovan "Building an efficient replication system for thousands of ter...
Anton Moldovan "Building an efficient replication system for thousands of ter...Anton Moldovan "Building an efficient replication system for thousands of ter...
Anton Moldovan "Building an efficient replication system for thousands of ter...
 
Need to-know patterns building microservices - java one
Need to-know patterns building microservices - java oneNeed to-know patterns building microservices - java one
Need to-know patterns building microservices - java one
 
Node js introduction
Node js introductionNode js introduction
Node js introduction
 
Ajaxworld March 2008 - Jeff Haynie Keynote - Appcelerator
Ajaxworld March 2008 - Jeff Haynie Keynote - AppceleratorAjaxworld March 2008 - Jeff Haynie Keynote - Appcelerator
Ajaxworld March 2008 - Jeff Haynie Keynote - Appcelerator
 

More from wallyqs

GoSF: Decoupling Services from IP networks with NATS
GoSF: Decoupling Services from IP networks with NATSGoSF: Decoupling Services from IP networks with NATS
GoSF: Decoupling Services from IP networks with NATSwallyqs
 
OSCON: Building Cloud Native Apps with NATS
OSCON:  Building Cloud Native Apps with NATSOSCON:  Building Cloud Native Apps with NATS
OSCON: Building Cloud Native Apps with NATSwallyqs
 
SF Python Meetup - Introduction to NATS Messaging with Python3
SF Python Meetup - Introduction to NATS Messaging with Python3SF Python Meetup - Introduction to NATS Messaging with Python3
SF Python Meetup - Introduction to NATS Messaging with Python3wallyqs
 
Connect Everything with NATS - Cloud Expo Europe
Connect Everything with NATS - Cloud Expo EuropeConnect Everything with NATS - Cloud Expo Europe
Connect Everything with NATS - Cloud Expo Europewallyqs
 
KubeCon NA 2018 - NATS Deep Dive: The Evolution of NATS
KubeCon NA 2018 - NATS Deep Dive: The Evolution of NATSKubeCon NA 2018 - NATS Deep Dive: The Evolution of NATS
KubeCon NA 2018 - NATS Deep Dive: The Evolution of NATSwallyqs
 
NATS for Rubyists - Tokyo Rubyist Meetup
NATS for Rubyists - Tokyo Rubyist MeetupNATS for Rubyists - Tokyo Rubyist Meetup
NATS for Rubyists - Tokyo Rubyist Meetupwallyqs
 
KubeConEU - NATS Deep Dive
KubeConEU - NATS Deep DiveKubeConEU - NATS Deep Dive
KubeConEU - NATS Deep Divewallyqs
 
NATS: Simple, Secure and Scalable Messaging For the Cloud Native Era
NATS: Simple, Secure and Scalable Messaging For the Cloud Native EraNATS: Simple, Secure and Scalable Messaging For the Cloud Native Era
NATS: Simple, Secure and Scalable Messaging For the Cloud Native Erawallyqs
 
GopherCon 2017 - Writing Networking Clients in Go: The Design & Implementati...
GopherCon 2017 -  Writing Networking Clients in Go: The Design & Implementati...GopherCon 2017 -  Writing Networking Clients in Go: The Design & Implementati...
GopherCon 2017 - Writing Networking Clients in Go: The Design & Implementati...wallyqs
 
GopherFest 2017 - Adding Context to NATS
GopherFest 2017 -  Adding Context to NATSGopherFest 2017 -  Adding Context to NATS
GopherFest 2017 - Adding Context to NATSwallyqs
 
NATS + Docker meetup talk Oct - 2016
NATS + Docker meetup talk Oct - 2016NATS + Docker meetup talk Oct - 2016
NATS + Docker meetup talk Oct - 2016wallyqs
 
The Zen of High Performance Messaging with NATS (Strange Loop 2016)
The Zen of High Performance Messaging with NATS (Strange Loop 2016)The Zen of High Performance Messaging with NATS (Strange Loop 2016)
The Zen of High Performance Messaging with NATS (Strange Loop 2016)wallyqs
 
サルでもわかるMesos schedulerの作り方
サルでもわかるMesos schedulerの作り方サルでもわかるMesos schedulerの作り方
サルでもわかるMesos schedulerの作り方wallyqs
 

More from wallyqs (13)

GoSF: Decoupling Services from IP networks with NATS
GoSF: Decoupling Services from IP networks with NATSGoSF: Decoupling Services from IP networks with NATS
GoSF: Decoupling Services from IP networks with NATS
 
OSCON: Building Cloud Native Apps with NATS
OSCON:  Building Cloud Native Apps with NATSOSCON:  Building Cloud Native Apps with NATS
OSCON: Building Cloud Native Apps with NATS
 
SF Python Meetup - Introduction to NATS Messaging with Python3
SF Python Meetup - Introduction to NATS Messaging with Python3SF Python Meetup - Introduction to NATS Messaging with Python3
SF Python Meetup - Introduction to NATS Messaging with Python3
 
Connect Everything with NATS - Cloud Expo Europe
Connect Everything with NATS - Cloud Expo EuropeConnect Everything with NATS - Cloud Expo Europe
Connect Everything with NATS - Cloud Expo Europe
 
KubeCon NA 2018 - NATS Deep Dive: The Evolution of NATS
KubeCon NA 2018 - NATS Deep Dive: The Evolution of NATSKubeCon NA 2018 - NATS Deep Dive: The Evolution of NATS
KubeCon NA 2018 - NATS Deep Dive: The Evolution of NATS
 
NATS for Rubyists - Tokyo Rubyist Meetup
NATS for Rubyists - Tokyo Rubyist MeetupNATS for Rubyists - Tokyo Rubyist Meetup
NATS for Rubyists - Tokyo Rubyist Meetup
 
KubeConEU - NATS Deep Dive
KubeConEU - NATS Deep DiveKubeConEU - NATS Deep Dive
KubeConEU - NATS Deep Dive
 
NATS: Simple, Secure and Scalable Messaging For the Cloud Native Era
NATS: Simple, Secure and Scalable Messaging For the Cloud Native EraNATS: Simple, Secure and Scalable Messaging For the Cloud Native Era
NATS: Simple, Secure and Scalable Messaging For the Cloud Native Era
 
GopherCon 2017 - Writing Networking Clients in Go: The Design & Implementati...
GopherCon 2017 -  Writing Networking Clients in Go: The Design & Implementati...GopherCon 2017 -  Writing Networking Clients in Go: The Design & Implementati...
GopherCon 2017 - Writing Networking Clients in Go: The Design & Implementati...
 
GopherFest 2017 - Adding Context to NATS
GopherFest 2017 -  Adding Context to NATSGopherFest 2017 -  Adding Context to NATS
GopherFest 2017 - Adding Context to NATS
 
NATS + Docker meetup talk Oct - 2016
NATS + Docker meetup talk Oct - 2016NATS + Docker meetup talk Oct - 2016
NATS + Docker meetup talk Oct - 2016
 
The Zen of High Performance Messaging with NATS (Strange Loop 2016)
The Zen of High Performance Messaging with NATS (Strange Loop 2016)The Zen of High Performance Messaging with NATS (Strange Loop 2016)
The Zen of High Performance Messaging with NATS (Strange Loop 2016)
 
サルでもわかるMesos schedulerの作り方
サルでもわかるMesos schedulerの作り方サルでもわかるMesos schedulerの作り方
サルでもわかるMesos schedulerの作り方
 

Recently uploaded

DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 

RustなNATSのClientを作ってみた