Share
Embed
Transcript
83 slides
-
લఏ w ͜ͷࢿྉͰͷϚΠΫϩαʔϏεͷఆٛ w ͭҎ্ͷγεςϜ͕࿈ܞ͢Δ ඦͱ͔ઍͷαʔϏε࿈ܞΛ͢Δେاۀ͚͕ͩରͰͳ͍ w ͦΕͧΕͷγεςϜ͕֦ுɺ·ͨ࿈ܞ͕૿͑ΔՄೳੑ͕͋Δ w
ຊʹϚΠΫϩαʔϏε͕ඞཁ͔ͷٞ͠ͳ͍ w $234Πϕϯτιʔγϯάͷৄࡉઆ໌ׂѪ -
ਐΊํ w લdཧฤd w ϦΫΤετϨεϙϯεͷ՝ w ΠϕϯτۦಈΞʔΩςΫνϟ w Πϕϯτϕʔε࿈ܞ w
υϝΠϯΠϕϯτ w ৗறܕͱΠϕϯτۦಈܕ w τϥϯβΫγϣϯ w ޙd࣮ફฤd w BTPWJFXϙΠϯταʔϏε w ઓུ w ઓज़ -
ΠϕϯτۦಈΞʔΩςΫνϟ Πϕϯτϕʔε w ಛఆͷग़དྷࣄ Πϕϯτ Λݕ͠ɺͦΕʹԠͯ͠ॲཧΛ͢Δ w ύϒϦογϟʔ͔Βൃߦ͞ΕͨΠϕϯτΛɺαϒεΫϥΠό͕ࢹ͠ɺͦͷΠϕϯτʹؔ͢ΔॲཧΛߦ͏ w ෳࡶੑ্͕Γ͍͕͢ɺૄ݁߹Ͱ֦ுੑ͕ߴ͘ɺՄ༻ੑ্
w ձһొͨ͠ w ϓϥϯΛ༧ͨ͠ w ࢧ͍͕ߦΘΕͨ w ϙΠϯτ͕༩͞Εͨ ʜͳͲ Πϕϯτੜ Πϕϯτݕ ৽͍͠Πϕϯτੜ Ԡͯ͠ॲཧ -
̍ରଟΠϕϯτϕʔε࿈ܞ w &$αΠτ͔ΒΠϕϯτΛύϒϦο γϡ w όοΫΤϯυαʔϏεΠϕϯτΛ αϒεΫϥΠϒ w ϙΠϯτػೳՃ όοΫΤϯυ୯ମͰͷػೳՃ
ύϒϦογϡ αϒεΫϥΠϒ αϒεΫϥΠϒ -
ଟରଟΠϕϯτϕʔε࿈ܞ w &$αΠτ͔ΒΠϕϯτΛύϒϦο γϡ w όοΫΤϯυαʔϏεΠϕϯτΛ αϒεΫϥΠϒ w /FXTαΠτ্ཱͪ͛ ύϒϦογϡ
αϒεΫϥΠϒ ύϒϦογϡ αϒεΫϥΠϒ -
ଟରଟΠϕϯτϕʔε࿈ܞ w &$αΠτ͔ΒΠϕϯτΛύϒϦο γϡ w όοΫΤϯυαʔϏεΠϕϯτΛ αϒεΫϥΠϒ w /FXTαΠτ্ཱͪ͛ ಉ͡ΠϕϯτΛύϒϦογϡ͢Δ͜
ͱͰಉ༷ͷػೳΛ࣮ݱ ύϒϦογϡ αϒεΫϥΠϒ ύϒϦογϡ αϒεΫϥΠϒ -
υϝΠϯΠϕϯτ w υϝΠϯʹؔ͢Δग़དྷࣄΛද͢σʔλ w ଟ͘Ϗδωεϧʔϧ͕ద߹͢ΔՄೳੑ͕͋Δ w ʙͱ͖ɺͦ͠͏ͳͬͨΒʙɺʙͷ߹ɺͳͲ w ιʔείʔυͱϏδωεϩδοΫͷҰக w
ϚΠΫϩαʔϏε ڥք͚ͮΒΕͨίϯςΩετ ͔Βൃੜ͢ΔΠϕϯτυϝΠϯΠϕϯτͱͳΔ Մೳੑ͕ߴ͍ w ϚΠΫϩαʔϏεؒͷ࿈ܞʹޮՌత -
ϝοηʔδϒϩʔΧʔ w ඇಉظͰΠϕϯτͱͳΔσʔλΛϝοηʔδͱͯ͠৴ w αʔϏεؒͰΦϒβʔόύλʔϯͷ࣮ݱ w ΠϕϯτόεɺΠϕϯτϓϩηοαʔɺϝοηʔδΩϡʔͳͲͱݺΕΔ w දతͳ w
3BCCJU.2ɺ,BGLBɺ"NB[PO424ɺ(PPHMF1VC4VCɺ"[VSF&WFOU )VCT w ʹΑͬͯɺಛੑ͕͋ΔͷͰ༻్ʹ߹Θͤͯબ w ॏෳഉআɺॱংอূɺ༰ྔ੍ݶɺӬଓԽɺύϑΥʔϚϯεɺϓϩτίϧɺ ϦτϥΠʜ -
ΠϕϯτۦಈϑΝϯΫγϣϯͱόον w ΠϕϯτॲཧͱճݶΓͷΠϯελϯε 㱠ηογϣϯ w ඇಉظͰεςʔτϨε͕ଟ͍ w Πϕϯτۦಈ'BB4͕ީิʹద͍ͯ͠Δ w
Πϕϯτۦಈ'BB4ͱΠϕϯτۦಈόονྨࣅ -
ৗறܕͱΠϕϯτۦಈܕ w ΠϕϯτۦಈॲཧΛ࣮ߦͰ͖ΔϥϯλΠϜʹΑΓ αʔόͷΑ͏ͳৗறڥ͕ෆཁʹͳΔ w Πϕϯτۦಈ'BB4ͷ׆༻ w ίετɺεέʔϥϏϦςΟͷ্ ྫ "84-BNCEB
݄݅ɺ(#ඵ·Ͱແྉ σϑΥϧτಉ࣮࣌ߦ w όονΠϕϯτۦಈʹஔ͖͑Մೳ w ߋʹ'BB4ӡ༻ $/$'4FSWFSMFTT8IJUFQBQFSW -
4BHB w ϚΠΫϩαʔϏεͰࢄτϥϯβΫγϣϯ ಛʹϑΣʔζίϛο τ σϝϦοτ͕ଟ͍ w ඇಉظϝοηʔδϯάʹΑΓαʔϏεؒͰϫʔΫϑϩʔΛߏ ஙɺσʔλͷҰ؏ੑΛҡ࣋ w
τϥϯβΫγϣϯϝοηʔδΛར༻͠ɺଞαʔϏεΛॱ࣍ߋ ৽ w ݁ՌԠϝοηʔδʹͯऔಘ w Τϥʔ࣌ิਖ਼τϥϯβΫγϣϯ Πϕϯτ ʹΑΔϩʔϧ όοΫ w ݁Ռ߹ੑΛڐ༰͢Δ͜ͱͰɺૄ݁߹ͳαʔϏεؒτϥϯβΫ γϣϯΛ࣮ݱ͕Ͱ͖Δ͕ෳࡶੑ্͕Δ -
4BHB ίϨΦάϥϑΟܕ w ϝϦοτ w Πϕϯτൃߦ͕γϯϓϧ w αʔϏεಉ͕͓࢜ޓ͍ΛΔඞཁ͕ͳ͘ૄ݁߹ w σϝϦοτ
w 4BHBͷશମѲ͕ࠔ w ॥ࢀরͷѻ͍͕͍͠ w খنͳ4BHBͰ͋ΕޮՌత w ෳࡶͳτϥϯβΫγϣϯΛཧ͢ΔʹΦʔέετϨʔ γϣϯܕ͕͍͍ͯΔ ύϒϦογϡ αϒεΫϥΠϒ -
4BHB ΦʔέετϨʔγϣϯܕ w ϝϦοτ w ॥ґଘ͕ͳ͘γϯϓϧ w 4BHBͷશମΛཧͰ͖Δ w ֤αʔϏε࣮ߦฦ৴ͷΈʹͳΓෳࡶੑ͕Լ͕Δ
w ϩʔϧόοΫ͕༰қ w σϝϦοτ w ΦʔέετϨʔλʔʹϏδωεϩδοΫ͕ूத͍͢͠ ʢີ݁߹ͯ͠͠·͏Մೳੑ͕͋Δʣ w ΦʔέετϨʔλʔΛ݁ʹఆٛͰ͖ΔΈ͕ඞཁ w খنͳ4BHBҎ֎Ͱ༗ޮͳՄೳੑ͕ߴ͍ ύϒϦογϡ αϒεΫϥΠϒ ᶃ ᶄ ᶅ ᶆᶊᶎ ᶇ ᶈ ᶉ ᶍ ᶌ ᶋ -
BTPWJFXϙΠϯτͱ ͏ ஷΊΔ ֬ೝ͢Δ w ձһ͕ϙΠϯτΛར༻͠ ࢧ͍Λߦ͏ w 6*ɾෆਖ਼ࢭͷͨΊɺόϦσʔ γϣϯɺτϥϯβΫγϣϯॏཁ
w τϥϯβΫγϣϯͱ߹ΘͤϦΞϧ λΠϜੑߴ͍ -
ϙΠϯτͱΠϕϯτۦಈΞʔΩςΫνϟ Πϕϯτۦಈ આ໌ ஷΊΔ ˓ ɾߋ৽ॲཧͰՄ༻ੑ͕ॏཁ ɾϦΞϧλϜੑ͍ ͏ ˚ ɾߋ৽ॲཧͰՄ༻ੑ͕ॏཁ
ɾόϦσʔγϣϯτϥϯβΫγϣϯॏཁ ɾϦΞϧλΠϜੑൺֱతߴ͍ ʢϏδωεཁ݅࣍ୈڐ༰͞ΕΔՄೳੑ͋Γʣ ֬ೝ͢Δ º ɾࢀরॲཧͰɺোΛڐ༰Ͱ͖ΔՄೳੑ͕͋Δ ɾϨΠςϯγʔͱϦΞϧλϜੑ͕ॏཁ -
ϙΠϯταʔϏε w ձһͷϙΠϯτػೳ ஷΊΔɾ͏ɾ֬ೝ͢Δ Λѻ͏ %%%ͷڥք͚ͮΒΕͨίϯςΩετ w ஷΊΔ݅ͷཧػೳΛ࣋ͪɺࠓޙ֦ு͍ͯ͘͠ w
ྫձһొϙΠϯτɺҬݶఆϙΠϯτɺϙΠϯτΩϟϯϖʔϯ w ϙΠϯτΛ׆༻ͨ͠ࢪࡦ࣮ݱͷͨΊɺ֦ுੑॊೈੑ͕ٻΊΒΕΔ ࢀߟྫͰࠓޙͷαʔϏεల։Λଋ͢ΔͷͰ͋Γ·ͤΜ -
ϙΠϯταʔϏεͷϙΠϯτ w ֦ுੑɾૄ݁߹ w ֤αʔϏεϙΠϯτͷίΞυϝΠϯʢఏڙ݅ɺܭࢉϩδοΫʣΛΔඞཁ͕ͳ͍ w ֤αʔϏεࣗͷυϝΠϯΠϕϯτΛύϒϦογϡ͢Δ͜ͱΛܖ w طʹΠϕϯτ͕ఏڙ͞Ε͍ͯΕɺϙΠϯταʔϏε୯ମͰαʔϏεͷػೳ֦ு͕Մೳ w
Մ༻ੑ w ඇಉظ࿈ܞͷͨΊϙΠϯταʔϏε͕ఀࢭ͍֤ͯͯ͠αʔϏεͷӨڹΛ࠷খݶʹͰ͖Δ w ো෮ؼͨ࣌͠ͰΠϕϯτͷ࠶ಡΈࠐΈ͕Մೳ w ಉظॲཧαʔϏεϨϕϧͷ(SBDFGVM%FHSBEBUJPOΛҙࣝ͢Δ w ϙΠϯτ֬ೝͳͲͷಉظ ߴτϥϑΟοΫͳॲཧݺͼग़͠ݩͰରࡦΛݕ౼ -
4JOHMFTPVSDFPGUSVUI w ୯Ұͷ(JUϦϙδτϦʹ֤αʔϏεؒͷΠϯλʔϑΣΠεΛ 1SPUPDPM#V⒎FSTͰఆٛ w ίϯγϡʔϚʔܖͷ࣮ݱ w Πϕϯτϕʔε ඇಉظ NFTTBHFͱͯ͠ఆٛ
w ϦΫΤετϨεϙϯε ओʹಉظ H31$ͷTFSWJDFͱͯ͠ఆٛ w $*$%ʹΑΔϥΠϒϥϦ৴ w ϦϙδτϦʹϓογϡ͢Δͱ$*$%Λ࣮ߦ͠ϥΠϒϥϦͱͯ͠ ࣗಈ৴ w ৴͞ΕͨϥΠϒϥϦΛಡΈࠐΉ͚ͩͰαʔϏεؒ࿈ܞΛૉ ૣ͘ɾ҆શʹ࣮ݱ ࣗಈੜ -
1SPUPDPM#V⒎FST w γϯϓϧ w ੩తܕ͚ w ଟݴޠରԠ w ܰྔ w
ϝοηʔδϯάϛυϧΣΞʹ༰ྔ੍ݶ͕͋Δ ߹͕ଟ͍ w ࣄۀɺϢʔβ૿ՃʹΑΓϝοηʔδ૿Ճ ͢Δ w +40/4DIFNBΑΓϝϦοτ͕େ͖͔ͬͨ message PlanReservedEvent { string event_id = 1; string event_type = 2; google.protobuf.Timestamp event_create_time = 3; int32 member_id = 4; int32 plan_no = 5; int32 price = 6; // ... } -
4QSJOH$MPVE4USFBN w ࣾͷΞϓϦέʔγϣϯ΄΅+BWB 4QSJOH#PPU w 4QSJOHͷΠϕϯτۦಈϚΠΫϩαʔϏεϑϨʔϜϫʔ Ϋ w ύϒϦογϟʔαϒεΫϥΠόʹΑΔΠϕϯτ
৴ w ίϯγϡʔϚʔάϧʔϓ w ύʔςΟγϣϯαϙʔτ w 4QSJOH#PPUͱͷ౷߹ 4PVSDF 4JOL 1SPDFTTFS .FTTBHF #SPLFS 4PVSDFc1SPDFTTFSc4JOL .FTTBHF #SPLFS -
"NB[PO,JOFTJT%BUB4USFBNT w ࣾͷΠϯϑϥ΄΅"84 w "84ϑϧϚωʔδυσʔλετϦʔ ϛϯάαʔϏε w ߴՄ༻ੑɺߴεϧʔϓοτɺϨίʔυͷ ظอ࣋ɺεέʔϦϯά w
ݱࡏͳΒϚωʔδυ,BGLB .4, 424 4QSJOH$MPVE4USFBNະରԠ ͳ Ͳީิ -
ύϒϦογϟʔͱαϒεΫϥΠόͷ࣮ w ύϒϦογϟʔ w ৴͞ΕͨϥΠϒϥϦ 1SPUPDPM #V⒎FST ͷΠϕϯτੜ w 4QSJOH$MPVE4USFBNʹΑΓ
.FTTBHFͱͯ͠ૹ৴ @EnableBinding(Source.class) class Publisher { Source source; public void publish(Plan plan) { var event = PlanReservedEvent.newBuilder() .setEventId(UUID.randomUUID().toString()) .setEventType(PlanReservedEvent.getDescriptor().getFullName()) .setEventCreateTime(now()) .setMemberId(plan.memberId()) // ... .build(); var message = MessageBuilder.withPayload(event) .setHeader("eventType", eventType(event)) .build(); source.output().send(message); } } -
ύϒϦογϟʔͱαϒεΫϥΠόͷ࣮ w αϒεΫϥΠό ϙΠϯταʔϏε w ৴͞ΕͨϥΠϒϥϦ 1SPUPDPM #V⒎FST ͷΠϕϯτλΠϓͰϑΟϧλʔ
w Πϕϯτ୯ҐͰυϝΠϯϩδοΫΛ࣮ @EnableBinding(Sink.class) class Subscriber { @StreamListener(value=Sink.INPUT, condition="headers['eventType']=='plan.v1.PlanReservedEvent'") public void handle(PlanReservedEvent event) { // ... } @StreamListener(value=Sink.INPUT, condition="headers['eventType']=='plan.v1.PlanChangedEvent'") public void handle(PlanChangedEvent event) { // ... } @StreamListener(value=Sink.INPUT, condition="headers['eventType']=='plan.v1.PlanCanceledEvent'") public void handle(PlanCanceledEvent event) { // ... } } -
υϝΠϯۦಈઃܭ w ࣾͰ͘࠾༻͞Ε͍ͯΔ w αʔϏε͝ͱͷͷࢦ ڥք͚ͮΒΕͨίϯςΩετ w νʔϜ։ൃͰઃܭࢥʹڞ௨ೝࣝΛ͍࣋ͪ͢ w
ϙΠϯτʹؔ͢ΔෳࡶͳϏδωεϩδοΫɺϧʔϧΛૉʹදݱͰ͖Δ w มߋ༰қੑͷ্ w υϝΠϯΠϕϯτͱ૬ੑ͕ྑ͍ -
$234ͱΠϕϯτιʔγϯά w ࣄۀ֦େͱڞʹϙΠϯτͷ༩ϩδοΫෳࡶʹͳΓɺޙ͔ΒͰमਖ਼͕ඞཁ w ༩ºձһଐੑººՁ֨ºൢച۠ºΩϟϯϖʔϯºߪೖཤྺºʜ w ಡΈࠐΈॲཧ֤ϖʔδ୯ҐͰݺͼग़͞ΕΔͨΊɺߴτϥϑΟοΫ w ձһͷอ࣋ϙΠϯτɺߪೖ࣌֫ಘͰ͖ΔϙΠϯτ w
ձһ͕֬ೝ͢ΔҎ֎ʹܦཧࠪͷҝʹɺաڈͷཤྺؚΊϙΠϯτૢ࡞Λ ͓ͯ͘͠ඞཁ͕͋Δ w σʔλ͕ΠϕϯτϕʔεͰ࿈ܞ͞Ε͍ͯΔ -
$234ͱΠϕϯτιʔγϯά w ࣄۀ֦େͱڞʹϙΠϯτͷ༩ϩδοΫෳࡶʹͳΓɺޙ͔ΒͰमਖ਼͕ඞཁ w ༩ºձһଐੑººՁ֨ºൢച۠ºΩϟϯϖʔϯºߪೖཤྺºʜ w ಡΈࠐΈॲཧ֤ϖʔδ୯ҐͰݺͼग़͞ΕΔͨΊɺߴτϥϑΟοΫ w ձһͷอ࣋ϙΠϯτɺߪೖ࣌֫ಘͰ͖ΔϙΠϯτ w
ձһ͕֬ೝ͢ΔҎ֎ʹܦཧࠪͷҝʹɺաڈͷཤྺؚΊϙΠϯτૢ࡞Λ ͓ͯ͘͠ඞཁ͕͋Δ w σʔλ͕ΠϕϯτϕʔεͰ࿈ܞ͞Ε͍ͯΔ ෭࡞༻ͷ͋ΔෳࡶͳϏδωεϩδοΫʹରͯ͠ɺ$234ͷ $PNNBOE͕༗ޮ -
$234ͱΠϕϯτιʔγϯά w ࣄۀ֦େͱڞʹϙΠϯτͷ༩ϩδοΫෳࡶʹͳΓɺޙ͔ΒͰमਖ਼͕ඞཁ w ༩ºձһଐੑººՁ֨ºൢച۠ºΩϟϯϖʔϯºߪೖཤྺºʜ w ಡΈࠐΈॲཧ֤ϖʔδ୯ҐͰݺͼग़͞ΕΔͨΊɺߴτϥϑΟοΫ w ձһͷอ࣋ϙΠϯτɺߪೖ࣌֫ಘͰ͖ΔϙΠϯτ w
ձһ͕֬ೝ͢ΔҎ֎ʹܦཧࠪͷҝʹɺաڈͷཤྺؚΊϙΠϯτૢ࡞Λ ͓ͯ͘͠ඞཁ͕͋Δ w σʔλ͕ΠϕϯτϕʔεͰ࿈ܞ͞Ε͍ͯΔ ύϑΥʔϚϯεΛཁٻ͞ΕΔ໘Ͱɺ$PNNBOEͱ 2VFSZΛׂ͠ɺνϡʔχϯάͷ༨Λ֬อ -
$234ͱΠϕϯτιʔγϯά w ࣄۀ֦େͱڞʹϙΠϯτͷ༩ϩδοΫෳࡶʹͳΓɺޙ͔ΒͰमਖ਼͕ඞཁ w ༩ºձһଐੑººՁ֨ºൢച۠ºΩϟϯϖʔϯºߪೖཤྺºʜ w ಡΈࠐΈॲཧ֤ϖʔδ୯ҐͰݺͼग़͞ΕΔͨΊɺߴτϥϑΟοΫ w ձһͷอ࣋ϙΠϯτɺߪೖ࣌֫ಘͰ͖ΔϙΠϯτ w
ձһ͕֬ೝ͢ΔҎ֎ʹܦཧࠪͷҝʹɺաڈͷཤྺؚΊϙΠϯτૢ࡞Λ ͓ͯ͘͠ඞཁ͕͋Δ w σʔλ͕ΠϕϯτϕʔεͰ࿈ܞ͞Ε͍ͯΔ աڈͷཤྺΛશͯ࣋ͪɺݱࡏঢ়ଶΛ࣮ݱ͢Δ͜ͱͰɺࠓޙ ͷ֦ுɺ৴པੑΛ୲อ -
෭࡞༻ͷগͳ͍ΦϒδΣΫτࢦ w +BWB ΦϒδΣΫτࢦ ঢ়ଶมԽ ෭࡞༻ ͱ ݶΒͳ͍ w ΦϒδΣΫτࢦͰΠϛϡʔλϒϧͳઃܭ
ॏཁ w ΠϛϡʔλϒϧͳΦϒδΣΫτ w ΠϕϯτɺϞσϧɺόϦϡʔΦϒδΣΫ τɺϑΝʔετΫϥείϨΫγϣϯʜ w ύϑΥʔϚϯεݒ೦͕͋Εঢ়ଶมԽΛڐ༰ class Point { Integer value; Point(Integer value) { this.value = value; } // void add(Point point) { // value = value + point.value; // } Point add(Point point) { return new Point(value + point.value); } } มߋ͞ΕͨΦϒδΣΫτΛ৽͘͠ฦ͢ ঢ়ଶมԽΛߦ͏ϝιου༻͠ͳ͍ -
γϯϓϧͰࣺ͍ͯ͢ΞʔΩςΫνϟ w ࣄۀͷΛߟ͑Δͱૣ͚ΕɺɺେܦͭͱϨΨγΟγεςϜͱͳΓ͍͢ w ࣜભٶΛલఏʹ͓ͯ͘͠ ෆ࣮֬ੑͷߴ͍ظతϝϯςφϯεੑΑΓɺϨΨγΠԽͨ͠ͱ͖ͷࣺͯ͢͞ w ڞ༗ϥΠϒϥϦɺڞ༗%#ͷېࢭ w
$234ΠϕϯτιʔγϯάΛ+BWBͰ࣮ݱ͢ΔͳΒ"YPO'SBNFXPSL"LLBɺ&WFOUVBUFͳͲ͕બࢶ w લఏࣝɺֶशίετ͕ߴ͘ɺ্ཱͪ͛ɺӡ༻໘ͰΦʔόʔϔου͕ߴ͘ɺҰґଘ͢ΔͱޙΓ͍͠ w ࠷খݶͷػೳͷΈࣗલͰ༻ҙ w $234Πϕϯτιʔγϯάͷલఏ͕ࣝͳ͍ਓগͳ͘ͳ͍ w 3FBEͱ8SJUFͷɺΠϕϯτϋϯυϥʔɺύλʔϯϚονɺϦϓϨΠͳͲ -
ࢀߟ w ϚΠΫϩαʔϏεΞʔΩςΫνϟ 4BN/FXNBO w .JDSPTFSWJDFT1BUUFSOT $ISJT3JDIBSETPO w
࣮ઓυϝΠϯۦಈઃܭ 7BVHIO7FSOPO w ਐԽతΞʔΩςΫνϟ /FBM'PSEɺ3FCFDDB1BSTPOTɺ1BUSJDL,VB w ࢄγεςϜσβΠϯύλʔϯ #SFOEBO#VSOT w 4PGUXBSF"SDIJUFDUVSF1BUUFSOT .BSL3JDIBSET