ç§ã¯ããã€ã¯ããµãŒãã¹ã¹ã¿ã€ã«ã«åŸã£ãŠããµãŒãã¹ãæœåºããããããç¬èªã®ã€ã³ã¹ã¿ã³ã¹ã«åé¢ããããã®å®çšç/æšå¥šãããæ¹æ³ãèŠã€ããããšããŠããŸãã ãã®åé¡ã§ã¯ã矜ã®ã©ã³ãã£ã³ã°ããŒãžã«èå³æ·±ã声æããããŸãïŒ
ãµãŒãã¹æåïŒãã§ã¶ãŒæåãããµãŒãã¹æåã¢ããªãæ§ç¯ããããã®æ§é ãæäŸããŸãã æçµçã«ã¢ããªããã€ã¯ããµãŒãã¹ã«åå²ããå¿ èŠãããå Žåã移è¡ã¯ç°¡åã§ãFeathersã¯ã¢ããªãç°¡åã«æ¡åŒµã§ããŸãã
ããããç§ã¯ãŸã ãã®ãŠãŒã¹ã±ãŒã¹ã矜æ¯ã§åŠçããæ¹æ³ã«ã€ããŠã®æ å ±ãèŠã€ããããšãã§ããŸããã§ããã
å®éã«ã¯ãæåã¯2ã€ã®åºæ¬çãªãããã¯ã«çŠç¹ãåœãŠãŠããŸãã
åãã£ãŠæè¬ããŸãïŒ
ããã§ãããŸã ããã¥ã¡ã³ãã¯ããŸããããŸãããããã远跡ããããã«ãå°ãåã«https://github.com/feathersjs/feathers/issues/157ãäœæããŸããã ããªããèšåãã2ã€ã®ãããã¯ã«ã€ããŠã®ç§ã®èãã®ããã€ãã¯ããã«ãããŸãïŒ
æåã«2ã€ã®ãµãŒãã¹ãåãããµãŒããŒããããšä»®å®ããŸãããã
app.use('/users', memory())
.use('/todos', memory());
ãŠãŒã¶ãŒãµãŒãã¹ã¯ã1ã€ã®ãµãŒããŒãåŠçã§ãããããå€ãã®ãã©ãã£ãã¯ãååŸããŠãããããå¥ã®ã¢ããªãäœæããŠå¥ã®ã·ã¹ãã ã«ç§»åããŸãã
// server1
app.use('/users', memory());
// server2
app.use('/todos', memory());
/todos
ãµãŒãã¹ããªã¢ãŒããµãŒãã¹ãšéä¿¡ã§ããããã«ããã«ã¯ã Feathersãã¯ã©ã€ã¢ã³ããšããŠäœ¿çšããŠæ¥ç¶ã§ããŸãïŒWebSocketã¯é«éã§åæ¹åãªã®ã§ããµãŒããŒééä¿¡ã«äœ¿çšããŸãããïŒïŒïŒ
// server2
const client = require('feathers/client')
const socketClient = require('feathers-socketio/client');
const io = require('socket.io-client');
const socket = io('http://other-server.com');
const otherApp = client().configure(socketClient(socket));
app.use('/todos', memory())
.use('/users', otherApp.service('users'));
ããã¯åºæ¬çã«ãWebSocketæ¥ç¶ãä»ããŠãŠãŒã¶ãŒãµãŒãã¹ããªã¢ãŒããµãŒãã¹ã«ééçã«æž¡ããŸãã å
ã®/users
ãšã³ããã€ã³ãã䜿çšãããã®ã¯ãäœãå€æŽããå¿
èŠã¯ãããŸããã
èªèšŒã«é¢ããŠã¯ãããŸããŸãªãªãã·ã§ã³ããããŸãã äžèšã®ã·ããªãªã§ã¯ã server2
ãäŸç¶ãšããŠã¯ã©ã€ã¢ã³ãã®å¯äžã®éä¿¡ãã€ã³ãã§ããããã server1
ãä»ã®ãµãŒããŒã®IPã¢ãã¬ã¹ããã¯ã€ããªã¹ãã«ç»é²ããã®ãæãç°¡åãªæ¹æ³ã§ãã æçµçã«ã server2
ã¯ããŠãŒã¶ãŒèªèšŒãåŠçããã²ãŒããŠã§ã€ã«ãªãããµãŒãã¹åŒã³åºããä»ã®ãµãŒããŒã«æž¡ãã ãã§æžã¿ãŸãïŒçºä¿¡å
IPã¢ãã¬ã¹ã確èªãã以å€ã«èªèšŒã«ã€ããŠå¿é
ããå¿
èŠã¯ãããŸããïŒã
è¿ä¿¡ããããšãããããŸãïŒ ãã®ãããã¯ãå ¬åŒããã¥ã¡ã³ãïŒããããã¬ã€ãã®ãµãã»ã¯ã·ã§ã³ïŒã§åãäžããäºå®ã¯ãããŸããïŒ ãã®ç¹ã§ç§ãè²¢ç®ã§ãããã©ããæããŠãã ããã
絶察ã«ã ãããŠãç§ãã¡ã¯ééããªãããã€ãã®å©ãã䜿ãããšãã§ããŸããã ãã¶ããæåã«ã¬ã€ãã§èŠãããã®ãéããŠãããããã€ãã®ãã¢ã¢ããªã±ãŒã·ã§ã³ãäœæããŸãããã
ð¯@ dafflã¯å€§
@dafflããã¯ãšã³ããã€ã¯ããµãŒãã¹ã§feathers-clientã䜿çšããŠèšåããã¢ãããŒãã§ã¯ãsocket.ioã䜿çšãããŠãããããã¹ããªãŒãã³ã°ããŒã¿ãä»ããåæ¹åéä¿¡ãå¯èœã§ãã ãã§ã¶ãŒã«ã¯ããã®ã·ããªãªã®ã»ãã³ãã£ãã¯/ APIããã§ã«ãããŸããïŒ ãã€ã¯ããµãŒãã¹ãããã©ãŠã¶ãŒã¯ã©ã€ã¢ã³ãã§ã¯ãªããä»ã®é¢å¿ã®ãããã€ã¯ããµãŒãã¹ã®ã€ãã³ããå ¬éããç¶æ³ãèããŠããŸãã
ã¯ããããããªãä»ã®é¢å¿ã®ãããµãŒãã¹ãWebSocketã䜿çšã§ããªãã£ãã®ã§ããïŒ ä»ã®ãããã€ããŒãè¿œå ããããšãèããŠããŸãïŒããšãã°ãããŸããŸãªã¡ãã»ãŒãžã³ã°ãµãŒãã¹çšïŒããä»ã®ãšããWebSocketã¯ååã«é«éã§ããããã«æããããã©ãŠã¶ãŒã§ã®ã¿äœ¿çšã§ããããã«ã©ãã«ãèšè¿°ãããŠããŸããã
@daffl @ekryskiãã§ã¶ãŒã¢ããªã±ãŒã·ã§ã³ãé åžãããããã«ãªããšãå°ãªããšã1åã®é ä¿¡ïŒackïŒãã¹ãçããã©ã³ã¶ã¯ã·ã§ã³ãããã¯ãã¬ãã·ã£ãŒïŒãã¥ãŒïŒãªã©ã®åé¡ã«ã察åŠããå¿ èŠããããŸãããfeathers-service-åŽåè ïŒã..ããªãã¡ã æ°žç¶çãªamqpïŒã€ãŸãrabbitmqïŒãã¥ãŒãŸãã¯redisïŒã€ãŸãkueã䜿çšïŒããã®ã€ãã³ããæ¶è²»ããå€éšããã»ã¹ïŒ
@dafflããªãã®çãã®åã«ç§ã¯ããç解ããŠããªãã£ããšæããŸãã é¢å¿ã®ãããµãŒãã¹ãWebãœã±ããã䜿çšããŠãããã¥ãŒãµãŒãµãŒãã¹ã«ãµãã¹ã¯ã©ã€ãããéåžžã®ã€ãã³ãAPIã䜿çšããŠãããã¥ãŒãµãŒã«æ°ããã€ãã³ããå ¬éããéããããããã§ã¶ãŒã§å®è£ ããã ãã§ååã§ãã
@justingreenbergã«åæããŸãã察åŠãã¹ãå¥ã®åé¡ã¯ã責任ã®ãããã€ã¯ããµãŒãã¹ããªãã©ã€ã³ã«ãªã£ããšãã«ãªã¯ãšã¹ããåçããããšã§ãïŒã¯ã©ãã·ã¥ãæŽæ°ãªã©ïŒã æè¡çã«ã¯ããããã¡ãã»ãŒãžãã¥ãŒã䜿çšããŠå¯ŸåŠããŸãã
ããã«ã€ããŠäœãé²å±ã¯ãããŸããïŒ ç§ã¯æ¬åœã«ããã€ãã®ããã¥ã¡ã³ã/å®çšçãªäŸãèŠããã§ãã ç¹ã«èªèšŒã®åŠçæ¹æ³ã«é¢ããŠã
@imnsç§ãã¡ã¯ããã«åãçµãã§ããŸãã ç§ã¯äŸã«åãçµã¿å§ããã¢ããªãåå²ããŸããããèªèšŒã®èšå®æ¹æ³ã«ããã€ãã®å¶éãããããšã«æ°ä»ããŸããã ãã®ãããçŸåšããããããé©åã«ãµããŒãããããã«èªèšŒããªãã¡ã¯ã¿ãªã³ã°ããŠããŸãã ãããçéžããã®ã«çŽ1é±éãããã¯ãã§ãã
ãããç§ã¯ä»ããããšãŠãã²ã©ã䜿ãããšãã§ããïŒD
奜å¥å¿ãããè€æ°ã®ããã³ããšã³ãã§ãæ©èœããããã«èªèšŒãäœãçŽããŠããŸããïŒ æè¿ã®å€§èŠæš¡ãªã¢ããªã®å€ãã¯ãããã¯ãšã³ãã§ãã€ã¯ããµãŒãã¹ã䜿çšããŠããŸãããããã³ããšã³ãã¢ããªãåå²ããŠãããšæããŸãã
å°ãäœåãªãéãããå Žåã¯ããã®æ¬ãèªãããšããå§ãããŸãïŒ https ïŒ//www.amazon.com/Building-Microservices-Sam-Newman/dp/1491950358/ref=sr_1_1ïŒie = UTF8ïŒqid = 1469071253ïŒsr = 8-1ïŒkeywords =ãã€ã¯ããµãŒãã¹
ã¿ããªãããã«é¢ããæŽæ°ã¯ãããŸããïŒ ããããšãããããŸããã
@juanpujolææ°æ å ±ã¯åžžã«ãã®ãã±ããã«å«ãŸããŠããŸãã ã§ããã§ãã¯ããŠãããŠããããšãã
ïŒããã®marcfawziïŒ
ã¹ã¬ããå šäœãèªãã ããã§ã¯ãããŸãããããµãŒãã¹ããšã«ããŒã¿ããŒã¹ã䜿çšã§ãããšæããŸãïŒMicreoservicesã¢ãŒããã¯ãã£ã§ã¯ãæœè±¡åãç¶æããããã«ãã®åé¢ãéèŠã§ããããã§ãªãå Žåããã¹ãŠã®ãµãŒãã¹ãåãããŒã¿ããŒã¹ãå ±æããŠãããšã人ã ã劚ããããšã«ãªããŸããçµ±äžããããµãŒãã¹APIã䜿çšããŠãµãŒãã¹ãæ§æãã代ããã«ããµãŒãã¹ã¢ãã«éã®é¢ä¿ãå®çŸ©ããããšïŒãã€ã¯ããµãŒãã¹ã®æœè±¡åã®éåïŒããïŒ
ãããæ¬åœã«åŠšãããã®ã¯äœããããŸãããç§ã¯ããªãããããããªãã®ã¯ããªã次第ã ãšæããŸãã ã¢ãã«ãšé¢ä¿ãORMã¬ãã«ã§å®çŸ©ããå Žåã«ã®ã¿ãå®éã«åé¡ã«ãªããŸãã å¥ã®ãµãŒãã¹ãåŒã³åºãããšã«ãã£ãŠãµãŒãã¹ã¬ãã«ã§é¢ä¿ãååŸããããšã¯ããã€ã¯ããµãŒãã¹ã®æœè±¡åã«éåãããšã¯æããŸããã
ããããŸãã«ç§ãæå³ããããšã§ãã ç§ã¯ãåãµãŒãã¹ãç¬èªã®ããŒã¿ããŒã¹ãæã£ãŠãããµãŒãã¹ã®åé¢ã¯ãORMã¬ãã«ã§ã¯ãªãããµãŒãã¹ã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠæ§æã匷å¶ãã確å®ãªæ¹æ³ã§ãããšèããåŸåããããŸãã
ãã ããFeathersã¯ãã€ã¯ããµãŒãã¹ãã¬ãŒã ã¯ãŒã¯ãããäžè¬çã§ãããããããã§ã¯ãã¹ãŠåé¡ãããŸããã ããããšãããããïŒ ããã¯ç§ããããæãäžããã»ã©èŠæ ããè¯ããªãç¶ããŸãïŒ ãã¹ãŠã®åšãã®çŽ æŽãããä»äºïŒ
ããã§ããã«ã€ããŠèšåããããšæã£ãã®ã¯ããã€ã¯ããµãŒãã¹ç°å¢ã§Feathersã䜿çšããéã«çºçããåé¡ã®ããã€ãã解決ããããã§ãã ããã¯æåã®å®è£ ã«ãããŸããããäœãè²¢ç®ã§ããããšãããã°ãããã«æ°è»œã«ã¢ã¯ã»ã¹ããŠ
ææã«èŠãã@ zapur1 ...ãã£ã¹ã«ãã·ã§ã³ãå§ããããã«ã³ã¡ã³ããæçš¿ããŸãã
https://github.com/feathersjs/feathers-syncãrabbitMQãRedisããŸãã¯MongoDBãšãšãã«äœ¿çšããŠããµãŒãã¹éã®ã¡ãã»ãŒãžãããŒã«ãŒãšããŠäœ¿çšãããã¹ãŠã®åæãç¶æããããšãã§ããŸãã
@ekryski feathers-sync
ãå°ãç°ãªãåé¡ã解決ããŸããååä»ããµãŒãã¹ïŒFeathersãµãŒãã¹ã§ã¯ãªããã€ã¯ããµãŒãã¹ã¹ã¿ã€ã«ã®ãµãŒãã¹ïŒã®é åå
ã§ã€ãã³ãã1åã ãåä¿¡ããå Žåã¯ã©ããªããŸããïŒ åäžã®APIã¢ããªããã€ãã³ããåä¿¡ããåäžã®ãµãŒãã¹ã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãããå Žåããããããã€ãã³ããåä¿¡ãããŸã£ããåãã³ãŒãã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ã§ãã®ã€ãã³ããåä¿¡ããããšãã«å®è¡ãããã¢ã¯ã·ã§ã³ãè€è£œããå¯èœæ§ããããŸãã
@ekryskiãªããžããªãããäžåºŠç¢ºèªãããšãããzapur1 / feathers-rabbitmqããèŠåãã§èšåããåé¡ãæ£ç¢ºã«è§£æ±ºããŸããã
socketClientã«ãã£ãŠãµãŒãã¹1ããµãŒãã¹2ã«æ¥ç¶ããå ŽåããµãŒãã¹2ã«ãã«ãã€ã³ã¹ã¿ã³ã¹ãããå Žåãè² è·åæ£ãå®è£ ããã«ã¯ã©ãããã°ããã§ãã:(
socketClientãä»ããŠæ¥ç¶ããå¥ã®ãµãŒããŒãµã€ãã¢ããªãäœæããå Žåãèšå®ãããŠããå¶éã«é¢ä¿ãªããã¹ãŠã®ãµãŒãã¹ãå©çšã§ããããã«èªèšŒããããã®æè¯ã®æ¹æ³ã¯äœã§ããã
https://github.com/kalisio/feathers-distributedã䜿çšããŠãããã«2ã»ã³ããè¿œå ãhttps://github.com/feathersjs/feathers-syncãšã¯ç°ãªã
ãµãŒããŒ1ãšãµãŒããŒ2ãå«ãäŸã®@dafflã¯ããµãŒããŒ2ã®/users
ãµãŒãã¹ãã©ã®ããã«ä¿è·ããŸããïŒ ãµãŒããŒ2ã§ãã®ãµãŒãã¹ãå®çŸ©ããŠããå Žåãç¹å®ã®ãµãŒãã¹ããã¯ãã¡ã€ã«ã§ããã¯ã䜿çšã§ããŸããã app.use('/users', otherApp.service('users'));
ãå®è¡ããŠããããããµãŒããŒ2ããã®ãã®ãµãŒãã¹ãžã®åŒã³åºãã®ã¿ãå®è¡ãããããã«ããã«ã¯ã©ãããã°ããã§ããããããŠãŒã¶ãŒãæåã«èªèšŒããå Žåã¯ïŒ
ç·šéïŒ
Nvmãç§ã¯èãããããšæããŸãïŒ const usersService = app.service('users')
ã次ã«usersService.hooks(hooks)
ãããªããšãè¡ãããšãã§ããŸããããã§ãããã¯ã«ã¯ãšã³ããã€ã³ããæ£ããä¿è·ããããã«å¿
èŠãªèªèšŒããã¯ããããŸããïŒ
åæ£èªèšŒãè¡ãæ¹æ³ã«ã€ããŠã¯ã https ïŒ
ãµãŒãã¹ãåå²ããæ¹æ³ã¯ããã€ããããããããã«é·æãšçæããããŸãã Feathersã«ãšã£ãŠäžè¬çã«éèŠãªããšã®1ã€ã¯ãã»ãã·ã§ã³ããªããJSONWebããŒã¯ã³ã ãã§ãããšããããšã§ãã JWTã¯ã¹ããŒãã¬ã¹ã§ãããåãã·ãŒã¯ã¬ãããå ±æããä»»æã®ãµãŒããŒã§èªã¿åãããšãã§ãããããäžå€®ã®ã»ãã·ã§ã³ã¹ãã¢ãå¿ èŠãããŸããã ç§ãèããããšãã§ãã2ã€ã®äž»ãªãªãã·ã§ã³ã¯æ¬¡ã®ãšããã§ãã
æãåèã«ãªãã³ã¡ã³ã
ããã§ãããŸã ããã¥ã¡ã³ãã¯ããŸããããŸãããããã远跡ããããã«ãå°ãåã«https://github.com/feathersjs/feathers/issues/157ãäœæããŸããã ããªããèšåãã2ã€ã®ãããã¯ã«ã€ããŠã®ç§ã®èãã®ããã€ãã¯ããã«ãããŸãïŒ
æåã«2ã€ã®ãµãŒãã¹ãåãããµãŒããŒããããšä»®å®ããŸãããã
ãŠãŒã¶ãŒãµãŒãã¹ã¯ã1ã€ã®ãµãŒããŒãåŠçã§ãããããå€ãã®ãã©ãã£ãã¯ãååŸããŠãããããå¥ã®ã¢ããªãäœæããŠå¥ã®ã·ã¹ãã ã«ç§»åããŸãã
/todos
ãµãŒãã¹ããªã¢ãŒããµãŒãã¹ãšéä¿¡ã§ããããã«ããã«ã¯ã Feathersãã¯ã©ã€ã¢ã³ããšããŠäœ¿çšããŠæ¥ç¶ã§ããŸãïŒWebSocketã¯é«éã§åæ¹åãªã®ã§ããµãŒããŒééä¿¡ã«äœ¿çšããŸãããïŒïŒïŒããã¯åºæ¬çã«ãWebSocketæ¥ç¶ãä»ããŠãŠãŒã¶ãŒãµãŒãã¹ããªã¢ãŒããµãŒãã¹ã«ééçã«æž¡ããŸãã å ã®
/users
ãšã³ããã€ã³ãã䜿çšãããã®ã¯ãäœãå€æŽããå¿ èŠã¯ãããŸãããèªèšŒã«é¢ããŠã¯ãããŸããŸãªãªãã·ã§ã³ããããŸãã äžèšã®ã·ããªãªã§ã¯ã
server2
ãäŸç¶ãšããŠã¯ã©ã€ã¢ã³ãã®å¯äžã®éä¿¡ãã€ã³ãã§ãããããserver1
ãä»ã®ãµãŒããŒã®IPã¢ãã¬ã¹ããã¯ã€ããªã¹ãã«ç»é²ããã®ãæãç°¡åãªæ¹æ³ã§ãã æçµçã«ãserver2
ã¯ããŠãŒã¶ãŒèªèšŒãåŠçããã²ãŒããŠã§ã€ã«ãªãããµãŒãã¹åŒã³åºããä»ã®ãµãŒããŒã«æž¡ãã ãã§æžã¿ãŸãïŒçºä¿¡å IPã¢ãã¬ã¹ã確èªãã以å€ã«èªèšŒã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸããïŒã