Re: Eventual consistency and 1 to n relationships

"[email protected] [domaindrivendesign]" <[email protected]> 12 Jan 2018 14:44:29 +0000
Newsgroups gmane.comp.programming.domain-driven-design
Message-ID <[email protected]>
--9nlWnTS9ocNmxdhsK3FKVLWiM6a5jwOaA8HvrLV
Content-Type:  text/plain;  charset=utf-8 
Content-Transfer-Encoding: base64

SGkgRGlyaywgDQoNCiBUaGUgc2xpZ2h0bHkgYmV0dGVyIHNvbHV0aW9uIHdvdWxkIGJlIHRo
YXQgdGhlIGhhbmRsZXIgaW52b2tlZCBvdmVyIFJhYmJpdE1RIGZvciB0aGUgUHJvZHVjdERp
c2NvbnRpbnVlZCBldmVudCB3b3VsZCBsb29rIHVwIHRoZSBJRHMgb2YgYWxsIHRoZSByZWxh
dGVkIE9yZGVycyB0aGF0IG5lZWQgdG8gYmUgY2FuY2VsbGVkIGFuZCB0aGVuIHNlbmQgb3V0
IGEgQ2FuY2VsT3JkZXIgY29tbWFuZCBmb3IgZWFjaCBvbmUgb2YgdGhlbSBhbHNvIG92ZXIg
UmFiYml0TVEuIFRoZW4sIHRoZSBoYW5kbGVyIGZvciB0aGUgQ2FuY2VsT3JkZXIgY29tbWFu
ZCB3b3VsZCBiZSBtb2RpZnlpbmcganVzdCB0aGUgb25lIGFnZ3JlZ2F0ZSBpbiBlYWNoIHRy
YW5zYWN0aW9uLg0KIA0KDQogQXMgR3JlZyBtZW50aW9uZWQgaW4gaGlzIHJlc3BvbnNlLCB5
b3UgbmVlZCB0byBiZSBhd2FyZSB0aGF0IFJhYmJpdE1RIGRvZXNuJ3QgZW5saXN0IGluIHRy
YW5zYWN0aW9ucyB3aXRoIGFueSBvdGhlciBwZXJzaXN0ZW5jZSB0ZWNobm9sb2d5LiBJZiB5
b3UncmUgY2FyZWZ1bCBhbmQgdGVzdCB3ZWxsLCB0aGlzIGNhbiBiZSBoYW5kbGVkIHdpdGgg
aWRlbXBvdGVuY2UuIEFsdGVybmF0aXZlbHksIHlvdSBjb3VsZCB1c2Ugd2hhdCdzIGtub3du
IGFzIHRoZSBPdXRib3ggcGF0dGVybiwgbGlrZSB3ZSd2ZSBpbXBsZW1lbnRlZCBpbiBOU2Vy
dmljZUJ1czogaHR0cHM6Ly9kb2NzLnBhcnRpY3VsYXIubmV0L25zZXJ2aWNlYnVzL291dGJv
eC8gaHR0cHM6Ly9kb2NzLnBhcnRpY3VsYXIubmV0L25zZXJ2aWNlYnVzL291dGJveC8uIA0K
IA0KDQogQ2hlZXJzLA0KIA0KDQogVWRpIERhaGFuDQo=

--9nlWnTS9ocNmxdhsK3FKVLWiM6a5jwOaA8HvrLV
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit





<head>

<style type="text/css">
<!--

/* start of attachment style */
       .ygrp-photo-title{
         clear: both;
         font-size: smaller;
         height: 15px;
         overflow: hidden;
         text-align: center;
         width: 75px;
       }
       div.ygrp-photo{
         background-position: center;
         background-repeat: no-repeat;
         background-color: white;
         border: 1px solid black;
         height: 62px;
         width: 62px;
       }

       div.photo-title 
         a,
         div.photo-title a:active,
         div.photo-title a:hover,
         div.photo-title a:visited {
           text-decoration: none; 
       }

       div.attach-table div.attach-row {
         clear: both;
       }

       div.attach-table div.attach-row div {
         float: left;
         /* margin: 2px;*/
       }

       p {
         clear: both;
         padding: 15px 0 3px 0;
	 overflow: hidden;
       }

       div.ygrp-file {
         width: 30px;
         valign: middle;
       }
       div.attach-table div.attach-row div div a {
         text-decoration: none;
       }

       div.attach-table div.attach-row div div span {
         font-weight: normal;
       }

       div.ygrp-file-title {
         font-weight: bold;
       }
 /* end of attachment style */
        -->
        </style>
        </head>
<html>
<head>
<style type="text/css">
<!--
#ygrp-mkp {
  border: 1px solid #d8d8d8;
  font-family: Arial;
  margin: 10px 0;
  padding: 0 10px;
}

#ygrp-mkp hr {
  border: 1px solid #d8d8d8;
}

#ygrp-mkp #hd {
  color: #628c2a;
  font-size: 85%;
  font-weight: 700;
  line-height: 122%;
  margin: 10px 0;
}

#ygrp-mkp #ads {
  margin-bottom: 10px;
}

#ygrp-mkp .ad {
  padding: 0 0;
}

#ygrp-mkp .ad p {
  margin: 0;
}

#ygrp-mkp .ad a {
  color: #0000ff;
  text-decoration: none;
}
-->
</style>
</head>
<body>



<!-- |**|begin egp html banner|**| -->

<br><br>

<!-- |**|end egp html banner|**| -->


Hi Dirk,<div><br></div><div>The slightly better solution would be that the handler invoked over RabbitMQ for the ProductDiscontinued event would look up the IDs of all the related Orders that need to be cancelled and then send out a CancelOrder command for each one of them also over RabbitMQ. Then, the handler for the CancelOrder command would be modifying just the one aggregate in each transaction.</div><div><br></div><div>As Greg mentioned in his response, you need to be aware that RabbitMQ doesn&#39;t enlist in transactions with any other persistence technology. If you&#39;re careful and test well, this can be handled with idempotence. Alternatively, you could use what&#39;s known as the Outbox pattern, like we&#39;ve implemented in NServiceBus: <a rel="nofollow" target="_blank" href="h
 ttps://docs.particular.net/nservicebus/outbox/">https://docs.particular.net/nservicebus/outbox/</a>.&nbsp;</div><div><br></div><div>Cheers,</div><div><br></div><div>Udi Dahan</div>



<!-- |**|begin egp html banner|**| -->

<br>


<br>

<!-- |**|end egp html banner|**| -->


<div width="1" style="color: white; clear: both;"/>__._,_.___</div>

      
  

    
    <div id="fromDMARC" style="clear:both; margin-top: 10px;">
         <hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
         Posted by: [email protected]         <hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
    </div>
<!-- Start Recommendations -->
<!-- End Recommendations -->



<!-- |**|begin egp html banner|**| -->

  <img src="http://geo.yahoo.com/serv?s=97476590/grpId=8116923/grpspId=1705007181/msgId=24843/stime=1515768271" width="1" height="1"> <br>

<!-- |**|end egp html banner|**| -->

  
<!-- |**|begin egp html banner|**| -->

<br>



   
     
 
        <!-- |**|begin egp html banner|**| -->
        <div id="ygrp-vital" style="background-color: #f2f2f2; font-family: Verdana; font-size: 10px; margin-bottom: 10px; padding: 10px;">

        <span id="vithd" style="font-weight: bold; color: #333; text-transform: uppercase; "><a href="https://groups.yahoo.com/neo/groups/domaindrivendesign/info;_ylc=X3oDMTJlcXU2bTZpBF9TAzk3MzU5NzE0BGdycElkAzgxMTY5MjMEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTUxNTc2ODI3MQ--" style="text-decoration: none;">Visit Your Group</a></span>

     <ul style="list-style-type: none; margin: 0; padding: 0; display: inline;">
            <li style="border-right: 1px solid #000; font-weight: 700; display: inline; padding: 0 5px; margin-left: 0;">
      <span class="cat"><a href="https://groups.yahoo.com/neo/groups/domaindrivendesign/members/all;_ylc=X3oDMTJmZXVxcWw4BF9TAzk3MzU5NzE0BGdycElkAzgxMTY5MjMEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzE1MTU3NjgyNzE-" style="text-decoration: none;">New Members</a></span>
      <span class="ct" style="color: #ff7900;">1</span>
    </li>
                                              </ul>
  </div>


<div id="ft" style="font-family: Arial; font-size: 11px; margin-top: 5px; padding: 0 2px 0 0; clear: both;">
  <a href="https://groups.yahoo.com/neo;_ylc=X3oDMTJkb3MxczE1BF9TAzk3NDc2NTkwBGdycElkAzgxMTY5MjMEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA2dmcARzdGltZQMxNTE1NzY4Mjcx" style="float: left;"><img src="http://l.yimg.com/ru/static/images/yg/img/email/new_logo/logo-groups-137x15.png" height="15" width="137" alt="Yahoo! Groups" style="border: 0;"/></a>
  <div style="color: #747575; float: right;"> &bull; <a href="https://info.yahoo.com/privacy/us/yahoo/groups/details.html" style="text-decoration: none;">Privacy</a> &bull; <a href="mailto:[email protected]?subject=Unsubscribe" style="text-decoration: none;">Unsubscribe</a> &bull; <a href="https://info.yahoo.com/legal/us/yahoo/utos/terms/" style="text-decoration: none;">Terms of Use</a> </div>
</div>

<!-- |**|end egp html banner|**| -->

  </div> <!-- ygrp-msg -->

   


  <br>

<!-- |**|end egp html banner|**| -->


<div style="color: white; clear: both;"/>__,_._,___</div>
</body>

</html>

--9nlWnTS9ocNmxdhsK3FKVLWiM6a5jwOaA8HvrLV--