<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bit Mojo - Hiram Chirino &#187; activemq</title>
	<atom:link href="http://hiramchirino.com/blog/tag/activemq/feed/" rel="self" type="application/rss+xml" />
	<link>http://hiramchirino.com/blog</link>
	<description>My Ramblings on Hawt Tech</description>
	<lastBuildDate>Mon, 26 Jul 2010 16:30:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Fuse Community Day: San Francisco</title>
		<link>http://hiramchirino.com/blog/2009/12/fuse-community-day-san-francisco/</link>
		<comments>http://hiramchirino.com/blog/2009/12/fuse-community-day-san-francisco/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 18:20:33 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Integration]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Messaging]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[camel]]></category>
		<category><![CDATA[cxf]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[fuse]]></category>
		<category><![CDATA[servicemix]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/blog/?p=117</guid>
		<description><![CDATA[I just found out I&#8217;m going to heading out to San Francisco to attend the Fuse Community Day!
Progress Software is sponsoring an Apache ServiceMix, ActiveMQ, CXF &#38; Camel Community Day on Thursday, December 10th, at the Hyatt Hotel in Burlingame. Join us at this free event and meet committers and founders of Apache ServiceMix, ActiveMQ, [...]]]></description>
			<content:encoded><![CDATA[<p>I just found out I&#8217;m going to heading out to San Francisco to attend the Fuse Community Day!</p>
<blockquote><p>Progress Software is sponsoring an Apache ServiceMix, ActiveMQ, CXF &amp; Camel Community Day on Thursday, December 10th, at the Hyatt Hotel in Burlingame. Join us at this free event and meet committers and founders of Apache ServiceMix, ActiveMQ, CXF and Camel that have successfully implemented enterprise application and deployed these projects in production.</p></blockquote>
<p>Should fun to meet users/developers of these kick ass Apache based projects.  If you plan on going, make sure your <a href="http://form.fusesource.com/forms/registersf2009" onclick="pageTracker._trackPageview('/outgoing/form.fusesource.com/forms/registersf2009?referer=');">register for the event</a>.  It&#8217;ll be nice to meet everyone!</p>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2009/12/fuse-community-day-san-francisco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>STOMP Clarification</title>
		<link>http://hiramchirino.com/blog/2009/09/stomp-clarification/</link>
		<comments>http://hiramchirino.com/blog/2009/09/stomp-clarification/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 13:22:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[stomp]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2009/09/stomp-clarification/</guid>
		<description><![CDATA[I just saw a tweet which demonstrates that the STOMP spec still needs more clarification.  I think Brian McCallister, the founding architect of protocol, will agree that one of the tenets of the protocol was for it to be simple enough to even use by user which directly connects to a server via telnet.
And [...]]]></description>
			<content:encoded><![CDATA[<p>I just saw a <a href="https://twitter.com/benjaminws/statuses/4112169015" onclick="pageTracker._trackPageview('/outgoing/twitter.com/benjaminws/statuses/4112169015?referer=');">tweet</a> which demonstrates that the <a href="http://activemq.apache.org/stomp/stomp10/specification.html" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/stomp/stomp10/specification.html?referer=');">STOMP spec</a> still needs more clarification.  I think <a href="http://skife.org/" onclick="pageTracker._trackPageview('/outgoing/skife.org/?referer=');">Brian McCallister</a>, the founding architect of protocol, will agree that one of the tenets of the protocol was for it to be simple enough to even use by user which directly connects to a server via telnet.</p>
<p>And to support that use case, newlines after the frame terminator are a natural occurrence.  But it might be easier to describe it as:
<ul>
<li>A stomp frame may have zero or more newlines preceding it&#8217;s command verb.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2009/09/stomp-clarification/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ActiveMQ Protobuf Implemtation Features</title>
		<link>http://hiramchirino.com/blog/2009/09/activemq-protobuf-implemtation-features/</link>
		<comments>http://hiramchirino.com/blog/2009/09/activemq-protobuf-implemtation-features/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 17:57:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[protobuf]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2009/09/activemq-protobuf-implemtation-features/</guid>
		<description><![CDATA[I promised I would follow up on my previous post on how the &#8220;The ActiveMQ Protobuf Implementation Rocks!&#8221;.
So you might be asking yourself, what&#8217;s the secret sauce? Well before I get into that, let me first explain the class model that our proto compiler generates.
For every message definition in the &#8216;.proto&#8217; file, the compiler will [...]]]></description>
			<content:encoded><![CDATA[<p>I promised I would follow up on my previous post on how the <a href="http://hiramchirino.com/blog/2009/09/the-activemq-protobuf-implementation-rocks">&#8220;The ActiveMQ Protobuf Implementation Rocks!&#8221;.</a></p>
<p>So you might be asking yourself, what&#8217;s the secret sauce? Well before I get into that, let me first explain the class model that our proto compiler generates.</p>
<p>For every message definition in the &#8216;.proto&#8217; file, the compiler will generate 3 classes:
<ul>
<li>the message interface: is implemented by the bean and buffer classes.  It has all the &#8216;getters&#8217;.</li>
<li>the bean class: has all the &#8217;setters&#8217; and &#8216;merge&#8217; methods</li>
<li>the buffer class: has all the encoding and decoding methods.  It does not allow mutation.</li>
</ul>
<p>The message interface also defines the freeze(), frozen(), and copy() methods which allow you to make an instance immutable, check to see if an instance is immutable, and create a mutable copy.  Buffer classes are alway immutable.  Bean class can transition to being immutable via freeze().  freeze() naturally returns a buffer object.  copy() naturally returns a bean object.</p>
<p>This bean model gives substantial flexibility.  Besides making it easy to transition from immutable to mutable and back, the message interface lets you implement business methods that operate against either type of instance.  You could use the bean class purely in a builder style to always generate a buffer instance, or you could just use them like traditional java bean objects.</p>
<p>Once a bean instance is frozen, any attempts to modify the instance will throw assertion errors if assertions are enabled in your JVM.  So the CPU cost of validating program correctness can can be disabled at run time.</p>
<p>Finally, the most important feature of the buffer class is that it holds on to either the byte array that it was created from or the frozen bean that created it, and sometimes both, after it builds one from the other.  This has several implications.  Firstly, once a buffer is encoded to a byte[], subsequent encoding passes are free.  This is also true when a buffer is decoded, as the next encoding is free since it still retains the original encoding of the message.  And the other benefit that this provides which the benchmark highlighted, is that deferred decoding is possible.  A newly created buffer class will not decode the data until a field is accessed.  This also true of the nested messages that are encoded in a buffer.  While the outer message may get decoded, the nested message will not be decoded until it&#8217;s fields are accessed.</p>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2009/09/activemq-protobuf-implemtation-features/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The ActiveMQ Protobuf Implementation Rocks!</title>
		<link>http://hiramchirino.com/blog/2009/09/the-activemq-protobuf-implementation-rocks/</link>
		<comments>http://hiramchirino.com/blog/2009/09/the-activemq-protobuf-implementation-rocks/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 05:15:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[protobuf]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2009/09/the-activemq-protobuf-implementation-rocks/</guid>
		<description><![CDATA[While reading Comparing the Java Serialization Options I ran across the a cool google code project which has done an excellent job benchmarking a wide variety of serialization options for java.
I&#8217;ve had been researching the protobuf encoding format for a while and really liked it.  But I did not really like the Java implementation [...]]]></description>
			<content:encoded><![CDATA[<p>While reading <a href="http://www.theserverside.com/news/thread.tss?thread_id=57871" onclick="pageTracker._trackPageview('/outgoing/www.theserverside.com/news/thread.tss?thread_id=57871&amp;referer=');">Comparing the Java Serialization Options</a> I ran across the a <a href="http://code.google.com/p/thrift-protobuf-compare/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/thrift-protobuf-compare/?referer=');">cool google code project</a> which has done an excellent job <a href="http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking?ts=1237772203&amp;updated=Benchmarking" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking?ts=1237772203_amp_updated=Benchmarking&amp;referer=');">benchmarking</a> a wide variety of serialization options for java.</p>
<p>I&#8217;ve had been researching the <span class="blsp-spelling-error" id="SPELLING_ERROR_0">protobuf</span> encoding format for a while and really liked it.  But I did not really like the Java implementation that Google had published.  It was kinda clunky to use and I saw several optimizations that could be used that were missing.  Optimizations that could create huge performance wins when applied to the usage patterns of an enterprise messaging system like <a href="http://activemq.apache.org/" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/?referer=');">Apache <span class="blsp-spelling-error" id="SPELLING_ERROR_1">ActiveMQ</span></a>.  So I created<a href="http://svn.apache.org/repos/asf/activemq/sandbox/activemq-flow/activemq-protobuf/" onclick="pageTracker._trackPageview('/outgoing/svn.apache.org/repos/asf/activemq/sandbox/activemq-flow/activemq-protobuf/?referer=');"> a new <span class="blsp-spelling-error" id="SPELLING_ERROR_2">protobuf</span> implementation</a> in the <span class="blsp-spelling-error" id="SPELLING_ERROR_3">ActiveMQ</span> project.</p>
<p>Naturally, I was curious to see how the <span class="blsp-spelling-error" id="SPELLING_ERROR_4">activemq</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_5">protobuf</span> implementation stacked up against similar technologies.  So I grabbed the V1 benchmark source code and added our implementation to it.  If you want to do the same, apply <a href="http://code.google.com/p/thrift-protobuf-compare/issues/detail?id=8" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/thrift-protobuf-compare/issues/detail?id=8&amp;referer=');">this patch</a>.</p>
<p>Once I ran the benchmark and I was very pleased with the results.  I&#8217;m including the performance graphs of our <span class="blsp-spelling-error" id="SPELLING_ERROR_6">impl</span> and standard <span class="blsp-spelling-error" id="SPELLING_ERROR_7">protobuf</span> and thrift for comparison.</p>
<p><img src="http://chart.apis.google.com/chart?chtt=timeCreate&amp;chf=c%7C%7Clg%7C%7C0%7C%7CFFFFFF%7C%7C1%7C%7C76A4FB%7C%7C0%7Cbg%7C%7Cs%7C%7CEFEFEF&amp;chs=400x100&amp;chd=t:246.79,208.72,304.14&amp;chds=0,506&amp;chxl=0:%7Cprotobuf%7Cthrift%7Cactivemq%20protobuf&amp;lklk&amp;chdlp=t&amp;chco=660000%7C660033%7C660066%7C660099%7C6600CC%7C6600FF%7C663300%7C663333%7C663366%7C663399%7C6633CC%7C6633FF%7C666600%7C666633%7C666666&amp;cht=bhg&amp;chbh=10&amp;chxt=y&amp;nonsense=aaa.png" /></p>
<p><img src="http://chart.apis.google.com/chart?chtt=timeSer&amp;chf=c%7C%7Clg%7C%7C0%7C%7CFFFFFF%7C%7C1%7C%7C76A4FB%7C%7C0%7Cbg%7C%7Cs%7C%7CEFEFEF&amp;chs=400x100&amp;chd=t:3087.0,3121.5,3205.0&amp;chds=0,6274&amp;chxl=0:%7Cprotobuf%7Cthrift%7Cactivemq%20protobuf&amp;lklk&amp;chdlp=t&amp;chco=660000%7C660033%7C660066%7C660099%7C6600CC%7C6600FF%7C663300%7C663333%7C663366%7C663399%7C6633CC%7C6633FF%7C666600%7C666633%7C666666&amp;cht=bhg&amp;chbh=10&amp;chxt=y&amp;nonsense=aaa.png" /></p>
<p><img src="http://chart.apis.google.com/chart?chtt=timeDSer&amp;chf=c%7C%7Clg%7C%7C0%7C%7CFFFFFF%7C%7C1%7C%7C76A4FB%7C%7C0%7Cbg%7C%7Cs%7C%7CEFEFEF&amp;chs=400x100&amp;chd=t:53.5,3231.0,1936.5&amp;chds=0,3480&amp;chxl=0:%7Cprotobuf%7Cthrift%7Cactivemq%20protobuf&amp;lklk&amp;chdlp=t&amp;chco=660000%7C660033%7C660066%7C660099%7C6600CC%7C6600FF%7C663300%7C663333%7C663366%7C663399%7C6633CC%7C6633FF%7C666600%7C666633%7C666666&amp;cht=bhg&amp;chbh=10&amp;chxt=y&amp;nonsense=aaa.png" /></p>
<p><img src="http://chart.apis.google.com/chart?chtt=totalTime&amp;chf=c%7C%7Clg%7C%7C0%7C%7CFFFFFF%7C%7C1%7C%7C76A4FB%7C%7C0%7Cbg%7C%7Cs%7C%7CEFEFEF&amp;chs=400x100&amp;chd=t:3387.29,6561.219999999999,5445.639999999999&amp;chds=0,10262&amp;chxl=0:%7Cprotobuf%7Cthrift%7Cactivemq%20protobuf&amp;lklk&amp;chdlp=t&amp;chco=660000%7C660033%7C660066%7C660099%7C6600CC%7C6600FF%7C663300%7C663333%7C663366%7C663399%7C6633CC%7C6633FF%7C666600%7C666633%7C666666&amp;cht=bhg&amp;chbh=10&amp;chxt=y&amp;nonsense=aaa.png" /></p>
<p>As it turns out, our implementation looks <span class="blsp-spelling-corrected" id="SPELLING_ERROR_8">awesome</span> in the benchmark! How about that decoding<span class="blsp-spelling-error" id="SPELLING_ERROR_9"></span> speed!</p>
<p>It&#8217;s getting late here.. so I&#8217;ll have do a follow up post explaining how come we did so much better.</p>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2009/09/the-activemq-protobuf-implementation-rocks/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Openwire Python Client for ActiveMQ</title>
		<link>http://hiramchirino.com/blog/2009/07/openwire-python-client-for-activemq/</link>
		<comments>http://hiramchirino.com/blog/2009/07/openwire-python-client-for-activemq/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 14:46:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[openwire]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2009/07/openwire-python-client-for-activemq/</guid>
		<description><![CDATA[Wow, I can&#8217;t believe I missed it.  Python lovers rejoice!  Seems some good folks have created a python client for ActiveMQ which is using the very robust ActiveMQ C++ client.
And for those of you on Ubuntu, Dejan Bosanac has put together an excellent guide on how to build it on ubuntu.
]]></description>
			<content:encoded><![CDATA[<p>Wow, I can&#8217;t believe I missed it.  Python lovers rejoice!  Seems some good folks have created a <a href="http://code.google.com/p/pyactivemq/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/pyactivemq/?referer=');">python client</a> for <a href="http://activemq.apache.org/" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/?referer=');">ActiveMQ</a> which is using the very robust <a href="http://activemq.apache.org/cms/" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/cms/?referer=');">ActiveMQ C++ client</a>.</p>
<p>And for those of you on Ubuntu, <a href="http://www.nighttale.net/about/" onclick="pageTracker._trackPageview('/outgoing/www.nighttale.net/about/?referer=');">Dejan Bosanac</a> has put together an excellent guide on <a href="http://www.nighttale.net/activemq/pyactivemq-on-ubuntu.html" onclick="pageTracker._trackPageview('/outgoing/www.nighttale.net/activemq/pyactivemq-on-ubuntu.html?referer=');">how to build it on ubuntu</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2009/07/openwire-python-client-for-activemq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TODO: Double Write Buffers</title>
		<link>http://hiramchirino.com/blog/2008/07/todo-double-write-buffers/</link>
		<comments>http://hiramchirino.com/blog/2008/07/todo-double-write-buffers/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 18:57:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[kahadb]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2008/07/todo-double-write-buffers/</guid>
		<description><![CDATA[Note to self: investigate implementing the Double Write Buffers idea in ActiveMQ.  ActiveMQ keeps several indexes into the persistent messages that it&#8217;s holding and when ActiveMQ is shutdown ungracefully, we rebuild the indexes from the data logs due to them being in inconsistent state.  If your queueing up millions of messages, building those [...]]]></description>
			<content:encoded><![CDATA[<p>Note to self: investigate implementing the <a href="http://www.mysqlperformanceblog.com/2006/08/04/innodb-double-write/" onclick="pageTracker._trackPageview('/outgoing/www.mysqlperformanceblog.com/2006/08/04/innodb-double-write/?referer=');">Double Write Buffers</a> idea in ActiveMQ.  ActiveMQ keeps several indexes into the persistent messages that it&#8217;s holding and when ActiveMQ is shutdown ungracefully, we rebuild the indexes from the data logs due to them being in inconsistent state.  If your queueing up millions of messages, building those indexes can take a long time.</p>
<p>Double buffering may allow us fix inconistencies in those index and gets us running faster..</p>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2008/07/todo-double-write-buffers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActiveMQ/SpecJMS/Camel Webinar</title>
		<link>http://hiramchirino.com/blog/2008/06/activemqspecjmscamel-webinar/</link>
		<comments>http://hiramchirino.com/blog/2008/06/activemqspecjmscamel-webinar/#comments</comments>
		<pubDate>Mon, 02 Jun 2008 19:30:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Integration]]></category>
		<category><![CDATA[Messaging]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[camel]]></category>
		<category><![CDATA[specjms]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2008/06/activemqspecjmscamel-webinar/</guid>
		<description><![CDATA[Whoa, time flies  by, and I forgot to post about the upcoming webinar that I will be co-hosting with Rob Davies on June 10th.  We will be covering some messaging basics, introducing Apache ActiveMQ and Apache Camel to the audience, but most interesting I think will be the section where Rob will be [...]]]></description>
			<content:encoded><![CDATA[<p>Whoa, time flies  by, and I forgot to post about the <a href="https://cc.readytalk.com/cc/schedule/display.do?rfe=ub5sdagy3uis&amp;udc=ueryf6x63zus" onclick="pageTracker._trackPageview('/outgoing/cc.readytalk.com/cc/schedule/display.do?rfe=ub5sdagy3uis_amp_udc=ueryf6x63zus&amp;referer=');">upcoming webinar</a> that I will be co-hosting with <a href="http://rajdavies.blogspot.com/" onclick="pageTracker._trackPageview('/outgoing/rajdavies.blogspot.com/?referer=');">Rob Davies</a> on June 10th.  We will be covering some messaging basics, introducing Apache ActiveMQ and Apache Camel to the audience, but most interesting I think will be the section where Rob will be covering the results that IONA has been seeing benchmarking ActiveMQ against the SpecJMS2007 test suite.  I totally agree with <a href="http://rajdavies.blogspot.com/2008/05/specjms2007-using-activemq.html" onclick="pageTracker._trackPageview('/outgoing/rajdavies.blogspot.com/2008/05/specjms2007-using-activemq.html?referer=');">Rob&#8217;s comment </a>that &#8220;An independent benchmark is important, because it negates the chance to skew  home groan tests to a vendor&#8217;s strengths.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2008/06/activemqspecjmscamel-webinar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>InfoQ Covers ActiveMQ 5.1 Release</title>
		<link>http://hiramchirino.com/blog/2008/05/infoq-covers-activemq-5-1-release/</link>
		<comments>http://hiramchirino.com/blog/2008/05/infoq-covers-activemq-5-1-release/#comments</comments>
		<pubDate>Thu, 29 May 2008 19:51:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2008/05/infoq-covers-activemq-5-1-release/</guid>
		<description><![CDATA[InfoQ has posted nice article on the new features in the ActiveMQ 5.1 release versus the last 4.1 release:

Apache ActiveMQ, an open source provider of enterprise messaging services, recently released version 5.1 which includes improvements in stability and performance of the message broker product. This version also includes support for priority message ordering and a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.infoq.com/news/2008/05/activemq-5.1-release;jsessionid=BFD02D79FC579EDFABD675E93D11BC13" onclick="pageTracker._trackPageview('/outgoing/www.infoq.com/news/2008/05/activemq-5.1-release_jsessionid=BFD02D79FC579EDFABD675E93D11BC13?referer=');">InfoQ</a> has posted nice article on the new features in the ActiveMQ 5.1 release versus the last 4.1 release:<br />
<blockquote>
<p><a href="http://activemq.apache.org/" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/?referer=');">Apache ActiveMQ</a>, an open source provider of enterprise messaging services, recently released <a href="http://activemq.apache.org/activemq-510-release.html" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/activemq-510-release.html?referer=');">version 5.1</a> which includes improvements in stability and performance of the message broker product. This version also includes support for priority message ordering and a Microsoft Message Queue (<a href="http://www.microsoft.com/windowsserver2003/technologies/msmq/default.mspx" onclick="pageTracker._trackPageview('/outgoing/www.microsoft.com/windowsserver2003/technologies/msmq/default.mspx?referer=');">MSMQ</a>) to ActiveMQ Bridge with the new <a href="http://cwiki.apache.org/confluence/display/CAMEL/msmq" onclick="pageTracker._trackPageview('/outgoing/cwiki.apache.org/confluence/display/CAMEL/msmq?referer=');">msmq</a> transport component. </p>
<p>There are also improvements in the <a href="http://activemq.apache.org/how-can-i-monitor-activemq.html" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/how-can-i-monitor-activemq.html?referer=');">monitoring</a> module of ActiveMQ container. A new DestinationSource class was added to access the available <a href="http://java.sun.com/javaee/5/docs/api/javax/jms/Queue.html" onclick="pageTracker._trackPageview('/outgoing/java.sun.com/javaee/5/docs/api/javax/jms/Queue.html?referer=');">Queues</a> or <a href="http://java.sun.com/javaee/5/docs/api/javax/jms/Topic.html" onclick="pageTracker._trackPageview('/outgoing/java.sun.com/javaee/5/docs/api/javax/jms/Topic.html?referer=');">Topics</a> or listen to Queues/Topics being created or deleted in the container. There is a new <a href="http://activemq.apache.org/maven/activemq-core/apidocs/org/apache/activemq/broker/region/DestinationStatistics.html" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/maven/activemq-core/apidocs/org/apache/activemq/broker/region/DestinationStatistics.html?referer=');">API</a> to help end users view available destinations and query them to find JMS statistics such as active queue count, queue depth, number of messages etc.</p>
<p><a href="http://www.infoq.com/news/2008/05/activemq-5.1-release;jsessionid=BFD02D79FC579EDFABD675E93D11BC13" onclick="pageTracker._trackPageview('/outgoing/www.infoq.com/news/2008/05/activemq-5.1-release_jsessionid=BFD02D79FC579EDFABD675E93D11BC13?referer=');">Read More&#8230;</a></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2008/05/infoq-covers-activemq-5-1-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActiveMQ 5.1.0 Release</title>
		<link>http://hiramchirino.com/blog/2008/05/activemq-5-1-0-release/</link>
		<comments>http://hiramchirino.com/blog/2008/05/activemq-5-1-0-release/#comments</comments>
		<pubDate>Wed, 07 May 2008 16:56:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2008/05/activemq-5-1-0-release/</guid>
		<description><![CDATA[For all of you who ran into issues with ActiveMQ 5.0.0 when running it in anger, I highly recommend you give the just released ActiveMQ 5.1.0 a try.  This release focused focused on making the broker rock solid.  It resolved several bugs which only reared their heads in high load situations.  Memory [...]]]></description>
			<content:encoded><![CDATA[<p>For all of you who ran into issues with <a href="http://activemq.apache.org/" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/?referer=');">ActiveMQ</a> 5.0.0 when running it in anger, I highly recommend you give the just <a href="http://activemq.apache.org/activemq-510-release.html" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/activemq-510-release.html?referer=');">released ActiveMQ 5.1.0</a> a try.  This release focused focused on making the broker rock solid.  It resolved several bugs which only reared their heads in high load situations.  Memory leaks have been squashed and performance has even improved in several areas. </p>
<p>Even if you have not had seen any issues with your 5.0.0 installation, I&#8217;d highly recommend you upgrade to 5.1.0 to avoid running into <a href="http://issues.apache.org/activemq/secure/ReleaseNote.jspa?version=11802&amp;styleName=Html&amp;projectId=10520&amp;Create=Create" onclick="pageTracker._trackPageview('/outgoing/issues.apache.org/activemq/secure/ReleaseNote.jspa?version=11802_amp_styleName=Html_amp_projectId=10520_amp_Create=Create&amp;referer=');">some of the bugs</a> that have been addressed in the release.</p>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2008/05/activemq-5-1-0-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mulitcast not working on a Linux box?</title>
		<link>http://hiramchirino.com/blog/2008/04/mulitcast-not-working-on-a-linux-box/</link>
		<comments>http://hiramchirino.com/blog/2008/04/mulitcast-not-working-on-a-linux-box/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 17:59:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[mutlticast]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2008/04/mulitcast-not-working-on-a-linux-box/</guid>
		<description><![CDATA[Just ran into a problem where some mutlicast tests were failing on a linux box and I could not figure out why.  Did a little bit of research and found out that you may need to add a route for it first.  So if you have this problem try running:
route add 224.0.0.0 netmask [...]]]></description>
			<content:encoded><![CDATA[<p>Just ran into a problem where some mutlicast tests were failing on a linux box and I could not figure out why.  Did a little bit of research and found out that you may need to add a route for it first.  So if you have this problem try running:<br />
<blockquote>route add 224.0.0.0 netmask 240.0.0.0 dev eth0</p></blockquote>
<p>or if you have an older version of linux like me:<br />
<blockquote>route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2008/04/mulitcast-not-working-on-a-linux-box/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More ActiveMQ Fanfare</title>
		<link>http://hiramchirino.com/blog/2008/01/more-activemq-fanfare/</link>
		<comments>http://hiramchirino.com/blog/2008/01/more-activemq-fanfare/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 14:59:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[activemq]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2008/01/more-activemq-fanfare/</guid>
		<description><![CDATA[Nice to see the new year starting off right.  I Noticed this post over at the eaimatrix.com:
A plethora of message queuing products exist in today&#8217;s EAI market, all aimed at providing solutions to the problem of application integration. Few can however  lay as much claim to fame as ActiveMQ, an open source Message [...]]]></description>
			<content:encoded><![CDATA[<p>Nice to see the new year starting off right.  I Noticed this post over at the eaimatrix.com:</p>
<blockquote><p>A plethora of message queuing products exist in today&#8217;s EAI market, all aimed at providing solutions to the problem of application integration. Few can however  lay as much claim to fame as <a href="http://activemq.apache.org/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/?referer=');">ActiveMQ</a>, an open source Message Broker and <a href="http://java.sun.com/products/jms/index.jsp" target="_blank" onclick="pageTracker._trackPageview('/outgoing/java.sun.com/products/jms/index.jsp?referer=');">JMS</a>/<a href="http://activemq.apache.org/enterprise-integration-patterns.html" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/enterprise-integration-patterns.html?referer=');">Enterprise Integration Patterns</a> provider which is  licensed, developed and distributed under the open source Apache emblem.  <a href="http://activemq.apache.org/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/?referer=');">ActiveMQ</a> provides  support for <a href="http://activemq.apache.org/cross-language-clients.html" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/cross-language-clients.html?referer=');">Cross Language Client and Protocols</a> as well as a powerful messaging broker which is supported in Java, C, C++, C#, Ruby, Perl, Python, PHP.</p></blockquote>
<p><a href="http://eaimatrix.com/blogs/eai/archive/2008/01/01/enterprise-messaging-with-activemq.aspx" onclick="pageTracker._trackPageview('/outgoing/eaimatrix.com/blogs/eai/archive/2008/01/01/enterprise-messaging-with-activemq.aspx?referer=');">Read the full article</a> by Ade Ayonrinde.</p>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2008/01/more-activemq-fanfare/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActiveMQ Webinar</title>
		<link>http://hiramchirino.com/blog/2007/11/activemq-webinar/</link>
		<comments>http://hiramchirino.com/blog/2007/11/activemq-webinar/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 15:29:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[webinar]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2007/11/activemq-webinar/</guid>
		<description><![CDATA[Late notice.. but James and I are doing an ActiveMQ Webinar in an hour and half.  Sign up for it and let us know what you thought about it.
]]></description>
			<content:encoded><![CDATA[<p>Late notice.. but <a href="http://macstrac.blogspot.com" onclick="pageTracker._trackPageview('/outgoing/macstrac.blogspot.com?referer=');">James</a> and I are doing an <a href="http://open.iona.com/resources/news/#webinar" onclick="pageTracker._trackPageview('/outgoing/open.iona.com/resources/news/_webinar?referer=');">ActiveMQ Webinar</a> in an hour and half.  Sign up for it and let us know what you thought about it.</p>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2007/11/activemq-webinar/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Learn how to Use ActiveMessaging to leverage ActiveMQ from Rails</title>
		<link>http://hiramchirino.com/blog/2007/03/learn-how-to-use-activemessaging-to-leverage-activemq-from-rails/</link>
		<comments>http://hiramchirino.com/blog/2007/03/learn-how-to-use-activemessaging-to-leverage-activemq-from-rails/#comments</comments>
		<pubDate>Fri, 02 Mar 2007 15:56:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[activemessaging]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2007/03/learn-how-to-use-activemessaging-to-leverage-activemq-from-rails/</guid>
		<description><![CDATA[You have to checkout this great InfoQ Article on ActiveMessaging.  It&#8217;s an outstanding writeup on how to use ActiveMQ from Rails.  I think this is just another sign that STOMP is gain momentum.
]]></description>
			<content:encoded><![CDATA[<p>You have to checkout this great <a href="http://www.infoq.com/articles/intro-active-messaging-rails" onclick="pageTracker._trackPageview('/outgoing/www.infoq.com/articles/intro-active-messaging-rails?referer=');">InfoQ Article</a> on ActiveMessaging.  It&#8217;s an outstanding writeup on how to use <a href="http://activemq.apache.org" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org?referer=');">ActiveMQ</a> from <a href="http://www.rubyonrails.org/" onclick="pageTracker._trackPageview('/outgoing/www.rubyonrails.org/?referer=');">Rails</a>.  I think this is just another sign that <a href="http://hiramchirino.com/2007/02/stompconnect-finally-you-can-talk.html">STOMP</a> is gain momentum.</p>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2007/03/learn-how-to-use-activemessaging-to-leverage-activemq-from-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActiveMQ Updates</title>
		<link>http://hiramchirino.com/blog/2007/02/activemq-updates/</link>
		<comments>http://hiramchirino.com/blog/2007/02/activemq-updates/#comments</comments>
		<pubDate>Tue, 20 Feb 2007 15:20:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[activemq]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2007/02/activemq-updates/</guid>
		<description><![CDATA[Wow, it&#8217;s been a while since I&#8217;ve posted but several exiting events have been happing in the ActiveMQ arena.

Apache ActiveMQ has GRADUATED out of the incubator and is an official Apache project!
The ActiveMQ website has moved to http://activemq.apache.org and has received a new face lift thanks to yours truly.
ActiveMQ 5.0 development is making huge progress [...]]]></description>
			<content:encoded><![CDATA[<p>Wow, it&#8217;s been a while since I&#8217;ve posted but several exiting events have been happing in the ActiveMQ arena.</p>
<ul>
<li>Apache ActiveMQ has <span style="font-weight: bold;">GRADUATED</span> out of the incubator and is an official Apache project!</li>
<li>The ActiveMQ website has moved to http://activemq.apache.org and has received a new face lift thanks to yours truly.</li>
<li>ActiveMQ 5.0 development is making huge progress and <a href="http://rajdavies.blogspot.com/index.html" onclick="pageTracker._trackPageview('/outgoing/rajdavies.blogspot.com/index.html?referer=');">Rob</a> has put up an <a href="http://rajdavies.blogspot.com/2007/02/apache-activemq-version-50-broker.html" onclick="pageTracker._trackPageview('/outgoing/rajdavies.blogspot.com/2007/02/apache-activemq-version-50-broker.html?referer=');">excellent post</a> outlining the upcoming features in the next version of ActiveMQ.</li>
</ul>
<p>If you want to get a preview of those features, <a href="http://activemq.apache.org/source.html" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/source.html?referer=');">get the latest from the ActiveMQ trunk</a> and kick it around.  <a href="http://activemq.apache.org/discussion-forums.html" onclick="pageTracker._trackPageview('/outgoing/activemq.apache.org/discussion-forums.html?referer=');">Feedback</a> would be appreciated.</p>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2007/02/activemq-updates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web 2.0 Communication Layer: from HTTP to Comet to Internet Mess</title>
		<link>http://hiramchirino.com/blog/2006/10/web-2-0-communication-layer-from-http-to-comet-to-internet-mess/</link>
		<comments>http://hiramchirino.com/blog/2006/10/web-2-0-communication-layer-from-http-to-comet-to-internet-mess/#comments</comments>
		<pubDate>Mon, 16 Oct 2006 21:31:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[comet]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2006/10/web-2-0-communication-layer-from-http-to-comet-to-internet-mess/</guid>
		<description><![CDATA[Checkout this server side thread.  Folks are starting to think about using JavaScript on the browser to access an &#8220;Internet Messaging Bus&#8221;.  They want to have thing like:

Guaranteed delivery
    Once and only once deliveryGuaranteed
 order of deliveryServer
 push and client pullFunny

 thing is that most of all that is available [...]]]></description>
			<content:encoded><![CDATA[<p>Checkout this <a href="http://www.theserverside.com/news/thread.tss?thread_id=42641" onclick="pageTracker._trackPageview('/outgoing/www.theserverside.com/news/thread.tss?thread_id=42641&amp;referer=');">server side thread</a>.  Folks are starting to think about using JavaScript on the browser to access an &#8220;Internet Messaging Bus&#8221;.  They want to have thing like:
<ul>
<li>Guaranteed delivery</li>
<li>    Once and only once deliveryGuaranteed</li>
<li> order of deliveryServer</li>
<li> push and client pullFunny</li>
</ul>
<p> thing is that most of all that is <a href="http://activemq.org/site/ajax.html" onclick="pageTracker._trackPageview('/outgoing/activemq.org/site/ajax.html?referer=');">available today</a> with <a href="http://activemq.org" onclick="pageTracker._trackPageview('/outgoing/activemq.org?referer=');">ActiveMQ</a>!  And to get really great performance, use ActiveMQ with <a href="http://jetty.mortbay.org/" onclick="pageTracker._trackPageview('/outgoing/jetty.mortbay.org/?referer=');">Jetty</a>!  ActiveMQ comes with a simple little JavaScript API that allows you to access the ActiveMQ message bus using Comet style http polling.  And ActiveMQ provides you all the above guarantees like all good message brokers.</p>
<p>Other news on this front is all the Ajax tool kits are starting to look at being able to inter-operate.  At a minimum, a page with multiple tool kits will need to share it&#8217;s connections back to the server.  So they will need to share an API to broker requests back to the server.  I&#8217;ll keep an eye out for this API because it sounds like something that could be easily tied into ActiveMQ.</p>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2006/10/web-2-0-communication-layer-from-http-to-comet-to-internet-mess/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beefing up Kaha</title>
		<link>http://hiramchirino.com/blog/2006/05/beefing-up-kaha/</link>
		<comments>http://hiramchirino.com/blog/2006/05/beefing-up-kaha/#comments</comments>
		<pubDate>Mon, 22 May 2006 23:40:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[activemq]]></category>
		<category><![CDATA[kaha]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2006/05/beefing-up-kaha/</guid>
		<description><![CDATA[Rob Davies and I spent some time last week looking at his Kaha message store implementation.  In a way, it&#8217;s similar to a experimental QuickJournal implementation that I had committed previously.  The idea of the QuickJournal was that Journal log files were not deleted and that messages could be easily retrieved from the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://rajdavies.blogspot.com/" onclick="pageTracker._trackPageview('/outgoing/rajdavies.blogspot.com/?referer=');">Rob Davies</a> and I spent some time last week looking at his <a href="http://rajdavies.blogspot.com/2006/04/file-store-persistence-for-activemq.html" onclick="pageTracker._trackPageview('/outgoing/rajdavies.blogspot.com/2006/04/file-store-persistence-for-activemq.html?referer=');">Kaha</a> message store implementation.  In a way, it&#8217;s similar to a experimental QuickJournal implementation that I had committed previously.  The idea of the QuickJournal was that Journal log files were not deleted and that messages could be easily retrieved from the Journal.  The journal would only checkpoint to the long term store the location of where the messages are located in the journal.</p>
<p>In a way, the long term store (JDBC in most cases) is being used like an index into the Journal files.  This increases the performance of the journal since the amount of data that needs to be stored in long term store is drastically reduced and generally of a small size which works better with JDBC batch operations.  Also messages do not need to be batched up in memory (for batch insertion into the DB) thus reducing the memory impact of the message store.</p>
<p>The funny part is that at some time last week, somehow a wager got started about who could build the fastest message store implementation that could stay under 64 megs of memory usage when a queue was loaded up with 10,000,00 1k messages.  Kaha at the current time keeps it&#8217;s indexes fully in memory.  So Rob started looking into a way to optimize the down so that they could fit in 64 megs (Rob is the optimization King BTW).  I went down the route of we need to only load parts of the index into memory.  I even shared my algorithm concept with him as long as he did not use it, LOL.   In the end we realized, it was not going to be a weekend deal to implement this stuff and it would be best to work on a single solution together.</p>
<p>Kaha, IS a nice API and is much more general purpose than the MessageStore APIs.  Some of the problems that Kaha currently has is that it does not guarantee constancy of the indexes and it does not support transactional operations.  Those are 2 things that the journal can do today, and which Kaha could do if we modified it&#8217;s DataManager so that it journaled operations instead of just storing data items.  So I&#8217;m going to try to integrate many of the Journal concepts into the DataManager so that:
<ul>
<li>The data file acts as a redo log that is &#8216;replayed&#8217; on startup to bring the indexes to a consistent state</li>
<li>Use async batch writes for increased throughput: micro benchmarks showed that the journal can write at about 21 megs/s while the current DataManager maxes out at 8 megs/s</li>
</ul>
<p>Other things to consider is that since the interfaces to the Kaha APIs are based on the List and Map interfaces, there is no easy way to:
<ul>
<li>switch between doing async and sync operations against the data files.  Currently Kaha has a force() method on the store that does syncs up any pending write but this is not optimal when using async batched writes (you end up syncing on a subsequent write).</li>
<li>associate a transaction with a operation against a list or a map</li>
</ul>
<p>An idea I&#8217;ve been floating in my head is the ability to have multiple proxies to a single physical container.  Each proxy could be enlisted in a different transaction or it&#8217;s flag to do sync vs. async actions changed.</p>
<p>As you might be able to tell by now, I&#8217;m on the Kaha crack now&#8230; bless Rob.</p>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2006/05/beefing-up-kaha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Closer Look at the Gigantic Destination Nut</title>
		<link>http://hiramchirino.com/blog/2006/05/a-closer-look-at-the-gigantic-destination-nut/</link>
		<comments>http://hiramchirino.com/blog/2006/05/a-closer-look-at-the-gigantic-destination-nut/#comments</comments>
		<pubDate>Mon, 22 May 2006 21:14:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[activemq]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2006/05/a-closer-look-at-the-gigantic-destination-nut/</guid>
		<description><![CDATA[I exposed the gigantic destination issues that ActiveMQ has in a previous blog post.  I&#8217;ll take a little time to expand on the issue and why it&#8217;s not simple to solve, and what ActiveMQ 4.0 does today.
It&#8217;s obvious that we need to swap messages to disk when a queue needs to hold more messages [...]]]></description>
			<content:encoded><![CDATA[<p>I exposed the gigantic destination issues that <a href="http://activemq.org" onclick="pageTracker._trackPageview('/outgoing/activemq.org?referer=');">ActiveMQ</a> has in a <a href="http://blogbucket.blogspot.com/2006/05/scaling-to-gigantic-queues-and-topics.html" onclick="pageTracker._trackPageview('/outgoing/blogbucket.blogspot.com/2006/05/scaling-to-gigantic-queues-and-topics.html?referer=');">previous blog post</a>.  I&#8217;ll take a little time to expand on the issue and why it&#8217;s not simple to solve, and what ActiveMQ 4.0 does today.</p>
<p>It&#8217;s obvious that we need to swap messages to disk when a queue needs to hold more messages than it could hold in RAM.  We sometimes also call that spooling messages to disk.  The issues that make this hard to implement are:
<ul>
<li>Writing a message to disk slows you down a little, avoid it if possible.  Sometimes you have no choice if the message was marked a persistent.</li>
<li>Sometimes we may need to swap out even non-persistent messages.</li>
<li>Avoid chucking a message out of ram if possible since loading it back from disk is REALLY slow.</li>
<li>When a consumer is ready to consume a message, that message should already be in memory, waiting for it to load from disk will lead to consumer starvation.</li>
<li>Even keeping lists of message references to where messages are on disk can use up too much memory.  10,000,000 disk locations in a linked list where every node in the list used only 100 bytes would still chew up about 100 megs of memory.</li>
</ul>
<p>ActiveMQ 4.0 takes a simple approach and when sending persistent message to a Queue, it uses a MessageReference when moving a message though the Broker message dispatch process.  A process that could take a while for a message to go from producer to a consumer and finally message acknowledgement.  The MessageReference starts out being direct, in that it hold a reference to the message to keep it in RAM, but if the reference count drops below 1, then the direct reference is dropped.  The reference count is allowed to drop to 0 when the message is just sitting in the Queue&#8217;s message list or in a consumer&#8217;s pending list.  The reference count is > 0 while it&#8217;s being dispatched to a consumer.  The MessageReference knows how to reload a Message from the peristence store when it&#8217;s reference count goes up above 0.</p>
<p>This is a quick and dirty fix and it works, but it obviously does not fix all the issues outlined initial.  The shortcomings of the current solution is that:
<ul>
<li>it is only implemented for Queues</li>
<li>consumer starvation problem can exist since it does not persisted load messages asynchronously</li>
<li>it keeps a list of MessageReference objects which can still exhaust JVM memory</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2006/05/a-closer-look-at-the-gigantic-destination-nut/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Scaling to Gigantic Queues and Topics</title>
		<link>http://hiramchirino.com/blog/2006/05/scaling-to-gigantic-queues-and-topics/</link>
		<comments>http://hiramchirino.com/blog/2006/05/scaling-to-gigantic-queues-and-topics/#comments</comments>
		<pubDate>Mon, 22 May 2006 17:49:00 +0000</pubDate>
		<dc:creator>Hiram Chirino</dc:creator>
				<category><![CDATA[Messaging]]></category>
		<category><![CDATA[activemq]]></category>

		<guid isPermaLink="false">http://hiramchirino.com/wordpress/2006/05/scaling-to-gigantic-queues-and-topics/</guid>
		<description><![CDATA[One of the current issues with ActiveMQ is that it&#8217;s an uber fast message broker while consumers are online and consuming messages, but things start to kinda not works so great when you have a use case where you want to queue up &#8216;work/messages&#8217; for a consumer that will be offline for days.
In ActiveMQ 4.0, [...]]]></description>
			<content:encoded><![CDATA[<p>One of the current issues with ActiveMQ is that it&#8217;s an uber fast message broker while consumers are online and consuming messages, but things start to kinda not works so great when you have a use case where you want to queue up &#8216;work/messages&#8217; for a consumer that will be offline for days.</p>
<p>In ActiveMQ 4.0, we have hacked in some initial support for loading up a queue with a huge number of messages without blowing up the memory usage of the JVM, but it&#8217;s a bit hacky and it may fail work right if a consumer comes back online and the consumer recovery process kicks in.</p>
<p>All in all 4.0 is a solid broker with a ton of new and exciting features, but personally, I would like to focus on getting 4.1 to be the broker that can handle Gigantic Queues and Topics.  I&#8217;ll post some more messages on this topic in the next few hours as I recap what I&#8217;ve discovered in the last few weeks.</p>
]]></content:encoded>
			<wfw:commentRss>http://hiramchirino.com/blog/2006/05/scaling-to-gigantic-queues-and-topics/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
