[{"data":1,"prerenderedAt":169},["ShallowReactive",2],{"project-26888303":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":34,"aspects":35,"strip":39,"post_text":40,"what":41,"said":58,"maker_in_thread":101,"shape":110,"grid":113,"attempts":132,"same_week":133,"maker_shows":37,"maker_hidden":162,"reader_version":163,"card":164},"26888303","Watermill","Exactly-once delivery counter using Watermill messaging library","title","Show HN: Exactly-once delivery counter using Watermill messaging library","https:\u002F\u002Fgithub.com\u002FThreeDotsLabs\u002Fwatermill\u002Ftree\u002Fexactly-once-delivery-example\u002F_examples\u002Freal-world-examples\u002Fexactly-once-delivery-counter","github.com","roblaszczak",1619005447,2021,18,9,1472,2533,59,"shown","languages","messaging library example","library",[24,25,26,27],"exactly-once delivery","message processing","watermill","go messaging","roasted",-0.5,{"positive":31,"neutral":32,"mixed":31,"critical":33},0,1,4,5,{"idea":36,"performance":38},{"positive":31,"critical":37},3,{"positive":31,"critical":32},[32,31,31,32,31,37,32,32,31],null,{"problem":40,"audience":40,"pricing":40,"motivation":40,"time_to_build":40,"stack":42,"openness":57,"stage":57,"team_size":57},[43,49],{"value":44,"source":45,"evidence":46},"Watermill messaging library","maker",[47],{"id":48},"post",{"value":50,"source":51,"evidence":52},"MySQL or PostgreSQL","commenter",[53],{"id":54,"by":55,"text":56},"26889307","kevincox","> 1. you need to use a Pub\u002FSub implementation that does support exactly-once delivery (only MySQL\u002FPostgreSQL for now), To implement exactly-once delivery you first need exactly…","unknown",{"praise":59,"objections":60,"requests":90,"questions":91,"alternatives":92},[],[61,75,79,83],{"value":62,"source":51,"evidence":63},"Exactly-once delivery is impossible end-to-end in distributed systems; the project only covers a subset",[64,68,71],{"id":65,"by":66,"text":67},"26889629","plank_time","Exactly-once delivery in a distributed environment is impossible. Close-to-exactly-once is possible but there is always a way to have a situation where exactly-once fails once…",{"id":69,"by":55,"text":70},"26890141","But that seems pointless. Exactly-once covering a subset of the pipeline doesn't guarantee exactly-once. At best it improves your chance of exactly-once delivery. If you really…",{"id":72,"by":73,"text":74},"26889163","mimir","This seems like another odd definition of \"exactly once\". The underlying assumption appears to be that all you work is happening insides the sql transaction, so all the work the…",{"value":76,"source":51,"evidence":77},"Idempotency at application level is preferable",[78],{"id":72,"by":73,"text":74},{"value":80,"source":51,"evidence":81},"Request IDs are needed for true exactly-once; the example lacks them",[82],{"id":54,"by":55,"text":56},{"value":84,"source":51,"evidence":85},"Key-value stores like Redis would be faster",[86],{"id":87,"by":88,"text":89},"26889641","poorman","Seems like any key value store would be better for this. Redis, DynamoDB, etc.. could get a lot higher throughput on messages.",[],[],[93,97],{"value":94,"source":51,"evidence":95},"Idempotent application-level updates",[96],{"id":72,"by":73,"text":74},{"value":98,"source":51,"evidence":99},"Redis or DynamoDB",[100],{"id":87,"by":88,"text":89},{"comments":102,"answered":32,"key":103},2,[104,107],{"id":105,"text":106},"26889507","Exactly-once delivery is covering processing in this scenario. Because of that it is not covered in tests and schemas. REST endpoint was just added to create entire use case. But…",{"id":108,"text":109},"26889548","> In my experience, it's easier to reason about and build systems when idempotency is an application level concern. This is exactly what we are doing in my company :) But it’s…",{"commenters":111,"max_depth":37,"maker_replies":102,"first_comment_mins":112,"lifespan_hours":37},7,84,[114,116,118,120,121,122,126,127,129],[54,31,32,115,55,31],"project\u002Fcritical\u002Fidea",[105,31,31,117,11,32],"commenter\u002Fneutral\u002Fidea",[69,31,31,119,55,31],"commenter\u002Fcritical\u002Fidea",[72,32,32,115,73,31],[108,32,31,117,11,32],[123,102,37,124,125,31],"26889268","project\u002Fneutral\u002Fidea","adamcharnock",[65,37,32,115,66,31],[87,33,32,128,88,31],"project\u002Fcritical\u002Fperformance",[130,33,31,117,131,31],"26889718","m110",[],[134,139,144,149,154,158],{"id":135,"name":136,"points":137,"category":138},"26878153","Cusdis",436,"dev_tools",{"id":140,"name":141,"points":142,"category":143},"26855726","PriceTable",381,"web_saas",{"id":145,"name":146,"points":147,"category":148},"26843339","Project Lovelace",369,"learning_science",{"id":150,"name":151,"points":152,"category":153},"26871660","Shepherd.com",313,"consumer_social",{"id":155,"name":156,"points":157,"category":153},"26866597","autonews.io",243,{"id":159,"name":160,"points":161,"category":153},"26845050","bef.no",238,false,"v2",{"id":165,"name":5,"line":6,"ai":162,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":29,"top":18,"kw":166,"maker":11,"domain":10,"tier":19,"attempts":31,"strip":167,"url":9,"mix":168,"praise":-1,"objection":62,"sub":21},26888303,[24,25,26,27],"100103110",[31,32,31,33],1794036605981]