<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoPlainText">I am implementing a .NET WCF ActiveDuplex service with RabbitMQ under the covers for messaging purposes.&nbsp;&nbsp; I am using the asynchronous message pattern of publish/subscribe within the ActiveDuplex service, which includes callbacks to
 the originating client.&nbsp; <o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">There are 2 parts to the equation:&nbsp; (a) our implementation of the WCF ActiveDuplex interface and (b) the RabbitMQ failover/recovery strategy.&nbsp; I was hoping you could help with the RabbitMQ part of the equation.&nbsp;
<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">Our previous implementation of RabbitMQ consisted of a Pacemaker active/passive HA cluster with two nodes, and a SAN disk for shared storage. We would connect to the cluster virtual IP for all RabbitMQ transactions, and the HA features
 of Pacemaker would manage resource failures automatically with the net effect that consumers could complete a RabbitMQ session without interruption.<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">We recently moved to a RabbitMQ Cluster as recommended in the Clustering Guide at
<a href="http://www.rabbitmq.com/clustering.html">http://www.rabbitmq.com/clustering.html</a> , where multiple RabbitMQ servers are arranged in an Active/Active fashion.&nbsp; In doing so we gain the benefits of a true HA environment but we have lost the ability
 to seamlessly recover from RabbitMQ failures, previously provided by the Pacemaker infrastructure (the single virtual IP).&nbsp;&nbsp; I&#8217;ve reviewed your .NET documentation and see there are references to the various shutdown protocols.&nbsp; Do you have more specific documentation
 that would elaborate on these and provide examples on how we can manage our client connections in this HA environment (e.g. if I receive a ModelShutdown event, what steps do I need to go through in order to &quot;transfer&quot; a RabbitMQ session to a new connection).&nbsp;
 Or are there other &quot;management&quot; APIs that should be used instead?<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">I&#8217;ve also been looking the book, <i>RabbitMQ In Action</i>, and a section on application failure and recovery (6.2) sounds almost as simple as wrapping the consumer/producer code in a try/catch block.
<o:p></o:p></p>
<p class="MsoPlainText"><o:p>&nbsp;</o:p></p>
<p class="MsoPlainText">Any thoughts would be appreciated.<o:p></o:p></p>
</div>
</body>
</html>