<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: NServiceBus, Semantic Versioning and events</title>
	<atom:link href="http://lostechies.com/jimmybogard/2013/01/31/nservicebus-semantic-versioning-and-events/feed/" rel="self" type="application/rss+xml" />
	<link>http://lostechies.com/jimmybogard/2013/01/31/nservicebus-semantic-versioning-and-events/</link>
	<description>Strong opinions, weakly held</description>
	<lastBuildDate>Sun, 19 May 2013 03:22:18 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
	<item>
		<title>By: Matt Hinze</title>
		<link>http://lostechies.com/jimmybogard/2013/01/31/nservicebus-semantic-versioning-and-events/#comment-5478</link>
		<dc:creator>Matt Hinze</dc:creator>
		<pubDate>Thu, 07 Feb 2013 21:58:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/jimmybogard/?p=723#comment-5478</guid>
		<description>How does this resolve with the spirit of this guidance? http://support.nservicebus.com/customer/portal/articles/894151-versioning-sample

At any rate, I think tying the .NET type metadata to the message schema is unacceptable platform coupling.  



Naively, I expect what&#039;s defined in MessageEndpointMappings to be stored as subscription data. 


I think we need to be verrrrry careful with SemVer.  I agree with conventional wisdom that it is well thought out and broadly applicable, but should not be shellacked upon every versioning problem.


Finally, the lack of information about this coupling - message schema to .NET type metadata - can lead to confusion .. especially considering the publisher&#039;s behavior when in cases where this suddenly doesn&#039;t match.</description>
		<content:encoded><![CDATA[<p>How does this resolve with the spirit of this guidance? <a href="http://support.nservicebus.com/customer/portal/articles/894151-versioning-sample" rel="nofollow">http://support.nservicebus.com/customer/portal/articles/894151-versioning-sample</a></p>
<p>At any rate, I think tying the .NET type metadata to the message schema is unacceptable platform coupling.  </p>
<p>Naively, I expect what&#8217;s defined in MessageEndpointMappings to be stored as subscription data. </p>
<p>I think we need to be verrrrry careful with SemVer.  I agree with conventional wisdom that it is well thought out and broadly applicable, but should not be shellacked upon every versioning problem.</p>
<p>Finally, the lack of information about this coupling &#8211; message schema to .NET type metadata &#8211; can lead to confusion .. especially considering the publisher&#8217;s behavior when in cases where this suddenly doesn&#8217;t match.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jbogard</title>
		<link>http://lostechies.com/jimmybogard/2013/01/31/nservicebus-semantic-versioning-and-events/#comment-5477</link>
		<dc:creator>jbogard</dc:creator>
		<pubDate>Thu, 07 Feb 2013 20:02:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/jimmybogard/?p=723#comment-5477</guid>
		<description>So one thing that might throw a wrench into all this is the assumption that the assembly version belongs in the message schema. Assembly versions can be used for a lot of things (identifying releases, dates, etc.) that have little or nothing to do with actual shape of the message.

The behavior we saw was that the year changed from 2012 -&gt; 2013, which we include as our major version (not even set by us, but by the build/deploy group), and all of our subscriptions broke, silently.

Typically, I&#039;d handle versioning much differently. I either add information, or I create new messages. If the message is so different that it would break clients (i.e. version number), it&#039;s a new message.</description>
		<content:encoded><![CDATA[<p>So one thing that might throw a wrench into all this is the assumption that the assembly version belongs in the message schema. Assembly versions can be used for a lot of things (identifying releases, dates, etc.) that have little or nothing to do with actual shape of the message.</p>
<p>The behavior we saw was that the year changed from 2012 -&gt; 2013, which we include as our major version (not even set by us, but by the build/deploy group), and all of our subscriptions broke, silently.</p>
<p>Typically, I&#8217;d handle versioning much differently. I either add information, or I create new messages. If the message is so different that it would break clients (i.e. version number), it&#8217;s a new message.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jbogard</title>
		<link>http://lostechies.com/jimmybogard/2013/01/31/nservicebus-semantic-versioning-and-events/#comment-5475</link>
		<dc:creator>jbogard</dc:creator>
		<pubDate>Thu, 07 Feb 2013 13:35:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/jimmybogard/?p=723#comment-5475</guid>
		<description>Type != message, assembly != version. The assumption is that the type IS the message. It&#039;s not. The type is the type, the message is the message. The type is merely a representation of the message, nothing more. If the message looks *exactly the same*, then it is the same message.

In any case, using the assembly version to version messages is a pretty lousy approach. It allows no wiggle room to support existing clients. If clients must upgrade all their DLLs, I&#039;ve increased, not decreased coupling.</description>
		<content:encoded><![CDATA[<p>Type != message, assembly != version. The assumption is that the type IS the message. It&#8217;s not. The type is the type, the message is the message. The type is merely a representation of the message, nothing more. If the message looks *exactly the same*, then it is the same message.</p>
<p>In any case, using the assembly version to version messages is a pretty lousy approach. It allows no wiggle room to support existing clients. If clients must upgrade all their DLLs, I&#8217;ve increased, not decreased coupling.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Edwin G. Castro</title>
		<link>http://lostechies.com/jimmybogard/2013/01/31/nservicebus-semantic-versioning-and-events/#comment-5474</link>
		<dc:creator>Edwin G. Castro</dc:creator>
		<pubDate>Thu, 07 Feb 2013 05:56:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/jimmybogard/?p=723#comment-5474</guid>
		<description>Well put. This is precisely what I was trying to convey but expressed much better than I was able to. This principle applies to all contracts/interfaces regardless of the mechanism used to communicate between parties.</description>
		<content:encoded><![CDATA[<p>Well put. This is precisely what I was trying to convey but expressed much better than I was able to. This principle applies to all contracts/interfaces regardless of the mechanism used to communicate between parties.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Edwin G. Castro</title>
		<link>http://lostechies.com/jimmybogard/2013/01/31/nservicebus-semantic-versioning-and-events/#comment-5473</link>
		<dc:creator>Edwin G. Castro</dc:creator>
		<pubDate>Thu, 07 Feb 2013 05:53:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/jimmybogard/?p=723#comment-5473</guid>
		<description>Using the perspective that the publisher always owns the contract (which is a valid perspective) then you must accept the fact that all subscribers must upgrade whenever the publisher decides to change. When physical assemblies are involved, then change is dictated by both physical structure (the classes themselves) and AssemblyVersion (two classes with the same structure in assemblies with different versions *are* different classes). In the end I don&#039;t think looking at contracts as either Send/Receive versus Publish/Subscribe is very interesting (as you mentioned they are both sources/sinks). What is interesting is your dedication to changing behavior without impacting the other end. If you want all clients to continue to subscribe and react to a particular message when you change behavior, then you must keep the AssemblyName constant (which include AssemblyVersion) because the true full name of the message includes the full AssemblyName. Changing the AssemblyVersion of your messages should require all your subscribers to upgrade. I personally don&#039;t find that strange or odd.</description>
		<content:encoded><![CDATA[<p>Using the perspective that the publisher always owns the contract (which is a valid perspective) then you must accept the fact that all subscribers must upgrade whenever the publisher decides to change. When physical assemblies are involved, then change is dictated by both physical structure (the classes themselves) and AssemblyVersion (two classes with the same structure in assemblies with different versions *are* different classes). In the end I don&#8217;t think looking at contracts as either Send/Receive versus Publish/Subscribe is very interesting (as you mentioned they are both sources/sinks). What is interesting is your dedication to changing behavior without impacting the other end. If you want all clients to continue to subscribe and react to a particular message when you change behavior, then you must keep the AssemblyName constant (which include AssemblyVersion) because the true full name of the message includes the full AssemblyName. Changing the AssemblyVersion of your messages should require all your subscribers to upgrade. I personally don&#8217;t find that strange or odd.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bruce Onder</title>
		<link>http://lostechies.com/jimmybogard/2013/01/31/nservicebus-semantic-versioning-and-events/#comment-5468</link>
		<dc:creator>Bruce Onder</dc:creator>
		<pubDate>Wed, 06 Feb 2013 00:59:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/jimmybogard/?p=723#comment-5468</guid>
		<description>The way one of my developers &quot;solved&quot; this at a previous company was classic: just pass strings around. LOL</description>
		<content:encoded><![CDATA[<p>The way one of my developers &#8220;solved&#8221; this at a previous company was classic: just pass strings around. LOL</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Udi Dahan</title>
		<link>http://lostechies.com/jimmybogard/2013/01/31/nservicebus-semantic-versioning-and-events/#comment-5467</link>
		<dc:creator>Udi Dahan</dc:creator>
		<pubDate>Sun, 03 Feb 2013 13:43:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/jimmybogard/?p=723#comment-5467</guid>
		<description>The short story here is that you can&#039;t just change a message schema and expect everything to continue to &quot;just work&quot;. 

You can change anything else you want about your publishers and subscribers without anything breaking.The schema is the only thing shared between publishers and subscribers so it should be versioned carefully - including changing its version number.</description>
		<content:encoded><![CDATA[<p>The short story here is that you can&#8217;t just change a message schema and expect everything to continue to &#8220;just work&#8221;. </p>
<p>You can change anything else you want about your publishers and subscribers without anything breaking.The schema is the only thing shared between publishers and subscribers so it should be versioned carefully &#8211; including changing its version number.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Banwart&#039;s Blog &#8250; Distributed Weekly 192</title>
		<link>http://lostechies.com/jimmybogard/2013/01/31/nservicebus-semantic-versioning-and-events/#comment-5466</link>
		<dc:creator>Scott Banwart&#039;s Blog &#8250; Distributed Weekly 192</dc:creator>
		<pubDate>Fri, 01 Feb 2013 09:35:19 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/jimmybogard/?p=723#comment-5466</guid>
		<description>[...] NServiceBus, Semantic Versioning and events [...]</description>
		<content:encoded><![CDATA[<p>[...] NServiceBus, Semantic Versioning and events [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jbogard</title>
		<link>http://lostechies.com/jimmybogard/2013/01/31/nservicebus-semantic-versioning-and-events/#comment-5465</link>
		<dc:creator>jbogard</dc:creator>
		<pubDate>Fri, 01 Feb 2013 02:31:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/jimmybogard/?p=723#comment-5465</guid>
		<description>Consumer/subscriber are two different concepts - I wouldn&#039;t mix the two. Send/Receive is much different than publish/subscribe.


In Send/Receive, the receiver owns the contract.


In Pub/Sub, the publisher owns the contract.


Think of it this way - the IRS - the receiver - owns the tax forms. The magazine publisher owns the magazine. It&#039;s both sources/sinks, but the roles they play are very different.</description>
		<content:encoded><![CDATA[<p>Consumer/subscriber are two different concepts &#8211; I wouldn&#8217;t mix the two. Send/Receive is much different than publish/subscribe.</p>
<p>In Send/Receive, the receiver owns the contract.</p>
<p>In Pub/Sub, the publisher owns the contract.</p>
<p>Think of it this way &#8211; the IRS &#8211; the receiver &#8211; owns the tax forms. The magazine publisher owns the magazine. It&#8217;s both sources/sinks, but the roles they play are very different.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Edwin G. Castro</title>
		<link>http://lostechies.com/jimmybogard/2013/01/31/nservicebus-semantic-versioning-and-events/#comment-5463</link>
		<dc:creator>Edwin G. Castro</dc:creator>
		<pubDate>Thu, 31 Jan 2013 17:29:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/jimmybogard/?p=723#comment-5463</guid>
		<description>I once read that interfaces belong to the consumer of the interface. I can&#039;t remember exactly where I read that but I&#039;ve seen this mistake happen over and over again in distributed scenarios. I work with WCF services and generally speaking I see service implementations defining the contract they implement. So whenever the service implementation changes it forces the contract to change as well. The end result is that the client/consumer also must change even if they wanted to continue to use the old contract. I&#039;ve seen this happen even when the new implementation supports multiple contracts. The same is happening here. The contract is the message. The message truly belongs to the consumer/subscriber. The publisher can specify which version of a message it happens to support. Therefore, if it is impractical to change all of your consumers to subscribe to a newer version of a message then somebody needs to continue to produce that specific version of the message (even if it is a different implementation of the publisher). Contracts/messages/interfaces really should be defined independently of both the subscriber/client that consume them and the publisher/service that implement/generate them. That is the only way to truly keep components loosely decoupled regardless of the mechanism used to communicate (service bus, SOAP, REST, RPC, Remoting, etc.).</description>
		<content:encoded><![CDATA[<p>I once read that interfaces belong to the consumer of the interface. I can&#8217;t remember exactly where I read that but I&#8217;ve seen this mistake happen over and over again in distributed scenarios. I work with WCF services and generally speaking I see service implementations defining the contract they implement. So whenever the service implementation changes it forces the contract to change as well. The end result is that the client/consumer also must change even if they wanted to continue to use the old contract. I&#8217;ve seen this happen even when the new implementation supports multiple contracts. The same is happening here. The contract is the message. The message truly belongs to the consumer/subscriber. The publisher can specify which version of a message it happens to support. Therefore, if it is impractical to change all of your consumers to subscribe to a newer version of a message then somebody needs to continue to produce that specific version of the message (even if it is a different implementation of the publisher). Contracts/messages/interfaces really should be defined independently of both the subscriber/client that consume them and the publisher/service that implement/generate them. That is the only way to truly keep components loosely decoupled regardless of the mechanism used to communicate (service bus, SOAP, REST, RPC, Remoting, etc.).</p>
]]></content:encoded>
	</item>
</channel>
</rss>
