SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
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
ご静聴ありがとうございます!

Más contenido relacionado

Destacado

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
 

Destacado (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 a 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 a 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
 

Más de 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
 

Más de 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の作り方
 

Último

Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
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
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
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
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
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
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
"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
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
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
 
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
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 

Último (20)

Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
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
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
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
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.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
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
"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
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
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
 
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!
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 

RustなNATSのClientを作ってみた